SpringBoot使用AOP拦截请求获得对象参数的JSON
例如
Entity类:
public class Company {
private Integer id;
private String companyName;
private Integer companyState;
public Company(Integer id, String companyName, Integer companyState) {
this.id = id;
this.companyName = companyName;
this.companyState = companyState;
}
public Company() {
super();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public Integer getCompanyState() {
return companyState;
}
public void setCompanyState(Integer companyState) {
this.companyState = companyState;
}
}
Action类:
@RestController
@RequestMapping("company")
public class CompanyAction {
@RequestMapping(value="updateone",method=RequestMethod.POST)
public ReturnJSON<List<Company>> updateOne(@RequestBody Company company_param){
System.out.println("进入action");
return new ReturnJSON<List<Company>>(null);
}
}
Aop类:
@Aspect
@Component
public class LogAspect {
@Pointcut("execution(public * com.action.*.*(..))")
public void webLog(){}
@Around("webLog()")
public Object arround(ProceedingJoinPoint pjp) {
System.out.println("方法环绕start.....");
try {
System.out.println("ARGS : " + Arrays.toString(pjp.getArgs()));
Object o = pjp.proceed();
System.out.println("方法环绕proceed,结果是 :" + o);
return o;
} catch (Throwable e) {
e.printStackTrace();
return null;
}
}
}
当我发出请求后,控制台显示这样:
方法环绕start.....
ARGS : [com.entity.Company@38250ab4]
进入action
方法环绕proceed,结果是 : com.entity4action.ReturnJSON@7a6f374c
我发送请求的参数是一个JSON,然后让SpringBoot自己通过JSON解析成对象Company的,但是我想用AOP来记录具体请求收到的JSON是怎样的,我应该要怎么写?是不是不应该拦截这个类,而是拦截SpringBoot的某个类?
这就是@RequestBody和@Pointcut("execution(public com.action..*(..))")谁先生效的问题,双方都是AOP,不过看这个结果是@RequestBody先生效了,在public Object arround(ProceedingJoinPoint pjp)里面只能获取到一个Company对象,原始的json已经没了。