通过request.getInputStream();的方式获取body参数实现起来比较复杂,因为输入流只能被使用一次。通过使用Spring的aop中point.getArgs()方法可以获取body参数,这种对源代码的侵入性比较小,优先选择。 参考:spring boot aop 中获取requestbody参数 二、效果展示 2020-07-23 14:19:59.124 |-INFO [http-nio-8080-exec-1...
通过使用Spring的aop中point.getArgs()方法可以获取body参数,这种对源代码的侵入性比较小,优先选择。 二 最终的日志展示效果 请求接口时间:2022-01-0617:08:44,信息为: 【request_id】:b541f6ce42d249e781233b5fbb911efd 【请求 URL】:http://localhost:802/busquery/testloghandle【请求 IP】:0:0:0:0:0...
log.info("Request Args : {}", objectMapper.writeValueAsString(arg)); } } } 在切点注解中对controller包下的全部方法进行了植入,JSONUtil为自己实现的json序列化工具。printCookie()方法为输出请求中的cookie信息,hasMultipartInput()为判断请求参数中是否包含流,包含流则无法被序列化。 注意 如果该类被多个项...
Map<String, String> rtnMap = converMap(request.getParameterMap()); //通过判断contenttype 区分数据类型 if(request.getContentType().equals("application/json")){ params = JSONObject.toJSONString(o[0]); }else { params = JSON.toJSONString(rtnMap); } request.setAttribute("body",o[0]); } ...
通常我们打印请求参数经常是在拦截器里面通过request.getParameter来做统一参数的打印,但是这样只能针对keyValue形式的参数,对于在requestBody里面post过来的数据,打印不出来。 为此,这里我用AOP的形式来统一做参数打印 代码 import com.alibaba.fastjson.JSONObject; ...
在SpringBoot项目中,最好使用参考AOP思想,加解密与Controller业务逻辑解耦,互不影响。 以解密为例:需要在request请求到达Controller之前进行拦截,获取请求body中的密文并对其进行解密,然后把解密后的明文重新设置到request的body上。 拦截器、过滤器、Controller之间的关系 ...
publicBaseResp<PageInfo>getProfitReportByOrder(@RequestBody@ValidatedSettlementDetailRequestrequest) { //统一返回结果BaseResp returnBaseResp.success(xxxService.getReceivableDetail(request)); } 1. 2. 3. 4. 5. 使用AOP拦截返回,对参数做处理
request.getInputStream()只能读取一次,所以当使用拦截器时,controller已经不能获取body中的参数。所以需要增加一个过滤器来解决,使流可以重复读取。代码如下 HttpServletRequest 过滤器:流可重复读 import com.xm.common.utils.HttpContextUtils; import org.springframework.core.annotation.Order; ...
我们在某些业务场景下需要对接口的入参进行校验或者权限验证,因此需要获取接口的参数列表依次来支持我们的逻辑操作,因此需要我们获取接口的参数,下面是利用自定义注解配合Aop来实现的一个思路: 首先定义一个切面类: @Aspect 用于声明一个类为切面 加在类上,如下: ...
前端请求的接口将请求参数json通过AES加密生成加密字符串,然后将加密字符串通过名为encyptStr字段传递给后端。 AOP前置方法拦截,将encyptStr字符串通过AES解密得到原始请求参数json,将json映射为请求方法的参数对象User。 接口通过参数成功响应,并将响应数据直接返回。