作用:对本次请求的controller的原返回值进行处理,然后返回自定义的返回值

注:Spring中是先根据元返回值查询HttpMessageConverter,然后再走ResponseBodyAdvice,所以我们修改了元返回值之后,还要考虑之前的这个MessageConverter是否支持新的自定义返回值,所以此时应该将通用转换器jackson的那个放到转换器最前面

下面是代码示例,首先创建一个返回值类

public class MyResult {private int status;
}

1.创建一个类A,implements ResponseBodyAdvice接口
2.在类A上加注解@ControllerAdvice,不能是@Component等其他注入注解

@ControllerAdvice
public class ValidException  implements ResponseBodyAdvice{@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}// 参数body就是controller原返回值// 返回值Object是本次请求实际返回去的值@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {if(body.getClass()!= MyResult.class){return new MyResult();}return body;}
}

之前也说了,如果原返回值是stirng,则spring会选择StringMessageConvert,所以我们选择万能的jackson转换器,需要修改默认转换区顺序

@Component
public class MessageConvert implements WebMvcConfigurer {@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {// 我使用的版本最后一个转换器是jackson,所以我直接把最后一个拿到最前面HttpMessageConverter<?> con = converters.get(converters.size() - 1);converters.add(0, con);System.out.println(converters);}
}

SpringMvc-ResponseBodyAdvice接口与@ControllerAdvice注解相关推荐

  1. 使用 @ControllerAdvice 和 实现ResponseBodyAdvice接口, 拦截Controller方法默认返回参数,统一处理返回值/响应体

    使用 @ControllerAdvice 和 实现ResponseBodyAdvice接口, 拦截Controller方法默认返回参数,统一处理返回值/响应体 1.Controller代码 以下是Co ...

  2. exceptionhandler注解_SpringMVC 中 @ControllerAdvice 注解的三种使用场景!

    @ControllerAdvice ,很多初学者可能都没有听说过这个注解,实际上,这是一个非常有用的注解,顾名思义,这是一个增强的 Controller.使用这个 Controller ,可以实现三个 ...

  3. spring的@ControllerAdvice注解

    @ControllerAdvice注解是Spring3.2中新增的注解,学名是Controller增强器,作用是给Controller控制器添加统一的操作或处理. 对于@ControllerAdvic ...

  4. SpringMVC全局乱码过滤器、注解@RequestParam、自定义类型转换器

    目录 配置全局乱码过滤器 参数绑定注解@RequestParam 注解@RequestParam的参数使用说明 获得Restful风格的参数 自定义类型转换器 自定义转换器的开发步骤: 获得Servl ...

  5. @ResponseStatus @ExceptionHandler @ControllerAdvice注解使用

    @ResponseStatus 一.用在@RequestMapping上 定义接口响应状态码 二.用在@ExceptionHandler同级上 定义异常处理完成后的响应状态码 三.用在@Control ...

  6. SpringMVC集成Hibernate Validator进行注解式的参数校验——让代码更少、更加专注于业务逻辑

    SpringMVC集成Hibernate Validator进行注解式的参数校验 --让代码更少.更加专注于业务逻辑 1 问题背景: 参数验证是一个常见的问题,例如验证用户输入的密码是否为空.邮箱是否 ...

  7. @ControllerAdvice注解(全局异常捕获)

    背景 @ControllerAdvice 注解 通常用于定义@ExceptionHandler, @InitBinder和@ModelAttribute 适用于所有@RequestMapping方法的 ...

  8. spring mvc异常统一处理(ControllerAdvice注解)

    spring mvc异常统一处理(ControllerAdvice注解) 参考文章: (1)spring mvc异常统一处理(ControllerAdvice注解) (2)https://www.cn ...

  9. Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获

    Spring boot异常统一处理方法:@ControllerAdvice注解的使用.全局异常捕获.自定义异常捕获 参考文章: (1)Spring boot异常统一处理方法:@ControllerAd ...

最新文章

  1. 从一致性hash到ceph crush算法演进图谱(持续更新)
  2. 如何利用 C# 爬取「猫眼电影专业版:票房」数据!
  3. linux清空文件内容
  4. iOS 模型数组去重复
  5. java.sql.SQLException: ORA-00911: 无效字符 解决方法
  6. 雷电交加,雨水倾泻--北京
  7. 嘀嗒公司被约谈 要求全面暂停进出京跨城网约车、顺风车等业务
  8. Spring Boot : SpringApplicationRunListener
  9. 五分钟学会python编程_每天五分钟python编程:生成器技术是python语言最强大的技术之一...
  10. 利用MATLAB仿真最小发射功率下WSN的连通性和覆盖率
  11. cmd 下通过NTML代理访问Maven 库
  12. 只知道人工智能远远不够 下一件大事将是边缘计算!
  13. 【2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) E】Cops And Roobers【最小割】
  14. coturn源码解析
  15. lbj学习日记 07 函数基础
  16. 目标板(linux)与PC 网卡 直连(TFTP)
  17. esp32 采集某个路由器信号强度
  18. Nodejs全方位入门
  19. 大数据学习必备 | 推荐几个牛X 的 github 项目,助你事半功倍
  20. 区块链公链生态-赛道分类

热门文章

  1. Elastic-Job项目启动后,控制台一直报Cron表达式有误且Cron表达式与当前配置的表达式不一样
  2. swagger的使用(com.spring4all)
  3. IDEA找到所有的断点
  4. Java中string中hashcode_为什么String中的Java hashCode()使用31作为乘数?
  5. 【数据分析】Python-NumPy模块的使用
  6. iplatui---弹窗
  7. java4android代码_Android逆向-java代码基础(4)
  8. 复旦考研计算机技术,复旦大学计算机技术(专业学位)考研难吗
  9. sourceTree对git的新建项目、储藏代码、切换分支、回滚代码、提交代码
  10. datetime(0) NULL DEFAULT NULL报错