ResponseBodyAdvice接口是在Controller执行return之后,在response返回给浏览器或者APP客户端之前,执行的对response的一些处理。可以实现对response数据的一些统一封装或者加密等操作。
@Slf4j
@ControllerAdvice
public class InterFaceResponse implements ResponseBodyAdvice{
//https://blog.csdn.net/a704397849/article/details/103440092
//在返回页面之前 获取controller中responsebody中的数据
@Override
public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) {
return true;
}
@SneakyThrows
@Override
public Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
//
ServletServerHttpRequest req=(ServletServerHttpRequest)serverHttpRequest;
HttpServletRequest servletRequest = req.getServletRequest();
//String str=getRequestBodyData(servletRequest);
String reqBody = new BodyReaderHttpServletRequestWrapper(servletRequest).getBody();
JSONObject jsonObject=JSONObject.parseObject(reqBody);
//String appid =servletRequest.getAttribute("appId").toString();
String path=servletRequest.getRequestURI();
log.info("=============reponseBody==============="+jsonObject.get("appId"));
String jsonBody=JSONObject.toJSONString(body,true);
System.out.println(jsonBody);
log.info("=============reponseBody==============="+path);
servletRequest.setAttribute("body", body);
return body;
}
}