前言
2021.10.15
起因是在项目中,我自己习惯都是在拦截器中拿参数、打日志。
但是一个接口对接方比较独特,参数都写在
request流
里面
也是第一次遇到。
但是问题是,request 流中的数据,只能被读取一次,现在日志打印读取了,后面 controller 里就没有了。
问题复现
接口接收数据对象:
@Data
public class QueryDTO {
public String id;
public Integer type;
}
接口方法:
@RestController
@RequestMapping(value = "stream")
public class StreamController {
@PostMapping(value = "errorDemo")
public String errorDemo(@RequestBody QueryDTO queryDTO, HttpServletRequest request) {
return JSONObject.toJSONString(queryDTO);
}
}
拦截器配置:
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Autowired
private StreamInterceptor streamInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(streamInterceptor).addPathPatterns("/**/errorDemo");
WebMvcConfigurer.super.addInterceptors(registry);
}
}
拦截器获取流数据打印日志:
@Slf4j
@Configuration
public class StreamInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
BufferedReader br = request