springboot aspect 切面获取请求数据

     项目有一个需求就是记录每次接口请求的一些数据。基于项目是springboot所以想到用切面aspect来实现这个功能。前提:

前端post提交数据的方式是:application/json,而且由于接口中一般都是用@RequestBoy +对象 的方式来接收参数的。

所以像一般的方式:

ServletRequestAttributes attributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
Enumeration enu = request.getParameterNames();
logger.info("====" + enu.hasMoreElements());
 while (enu.hasMoreElements()) {
       String paraName = enu.nextElement();
       logger.info("=========" + paraName + ": " + request.getParameter(paraName));
 }

从request中是无法取到参数到,这是因为参数使用@RequestBoy 那么前端传递的参数是放在请求体里面的。

Signature signature = joinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
String[] parameterNames = methodSignature.getParameterNames();
Object[] parameterValues = joinPoint.getArgs();
Map paramMap = new HashMap<>();
for (int i=0;i

这种情况就要从joinPoint.getArgs()获取参数值,methodSignature.getParameterNames()可以获取参数名。

这里其中涉及到前端POST的传参方式:(application/x-www-form-urlencoded,multipart/form-data,application/json,text/xml),以及@RequestBoy的使用。

参考文档:@RequestBody的使用  四种常见的 POST 提交数据方式

 

你可能感兴趣的:(java,aspect,@RequestBoy)