zoukankan      html  css  js  c++  java
  • ResponseBodyAdvice拦截Controller方法默认返回参数,统一处理返回值/响应体

     背景:
           公司小程序项目改造需要后端接口统一数据返回 原来的封装数据返回格式不适合需要改造  老项目几百个接口 一个个改接口肯定不行。
           后来制定两套方案 一种 拦截器 另一种 ResponseBodyAdvice后来选择了ResponseBodyAdvice 
          为什么不使用拦截器?因为之前的接口统一规范了@ResponseBody带@RestController的类和带@ResponseBody的方法在被调用后response会直接写入输出流,在postHandle和afterCompletion这两个方法执行之前就已经把数据返回,导致这两个方法里面的response根本获取不到响应数据。
          而ResponseBodyAdvice拦截Controller方法默认返回参数,统一处理返回值/响应体  ResponseBodyAdvice可以在注解@ResponseBody将返回值处理成相应格式之前操作返回值。实现这个接口即可完成相应操作。
    import com.alibaba.fastjson.JSON;import org.springframework.core.MethodParameter;
    import org.springframework.http.MediaType;
    import org.springframework.http.server.ServerHttpRequest;
    import org.springframework.http.server.ServerHttpResponse;
    import org.springframework.web.bind.annotation.ControllerAdvice;
    import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
    
    import java.util.Objects;
    
    @ControllerAdvice
    public class XcxResponseBodyAdvice implements ResponseBodyAdvice {

    /** * supports方法是来给定条件判断是否该调用beforeBodyWrite,MethodParameter里面有各种数据, **/ @Override public boolean supports(MethodParameter methodParameter, Class aClass) { return true; } /** * 响应结果拦截根据业务去封装返回体 **/ @Override public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { log.biz("构造结果" + JSON.toJSONString(o)); return o; } }

    原文传送:https://blog.csdn.net/weixin_43647964/article/details/107298537 

         
  • 相关阅读:
    让程序只有一个进程实例在运行
    HDFS写入和读取流程
    HBase技术详细介绍
    Eclipse下配置使用Hadoop插件
    Hadoop节点热拔插
    剖析为什么在多核多线程程序中要慎用volatile关键字?
    MapReduce 模式、算法和用例(MapReduce Patterns, Algorithms, and Use Cases)
    并行编程中的“锁”难题
    配置 eclipse 编译、开发 Hadoop(MapReduce)源代码
    HBASE松散数据存储设计初识
  • 原文地址:https://www.cnblogs.com/ysg520/p/13284299.html
Copyright © 2011-2022 走看看