实践spring自定义返回格式
2020-08-20 本文已影响0人
栗津津家的栗冬冬
step 1 查看springmvc下的一些处理器解释器:
下面以RequestResponseBodyMethodProcessor为例
![](https://img.haomeiwen.com/i10278482/0b479ac284f663f6.png)
step2 :
查看接口继承实现关系
RequestResponseBodyMethodProcessor----->AbstractMessageConverterMethodProcessor---->HandlerMethodReturnValueHandler
![](https://img.haomeiwen.com/i10278482/1b5ad9803fb13e74.png)
![](https://img.haomeiwen.com/i10278482/d3e86c6fcdd13186.png)
HandlerMethodReturnValueHandler为顶层接口,需要去实现这两个方法。
查看RequestResponseBodyMethodProcessor具体实现如下:
![](https://img.haomeiwen.com/i10278482/05fc935126bd60fa.png)
![](https://img.haomeiwen.com/i10278482/34515759230d5015.png)
具体处理如下:
![](https://img.haomeiwen.com/i10278482/d19215c75cff42ee.png)
以其中一个实现为例:
在MappingJackson2Http没有看到write的实现则往上层找找看
![](https://img.haomeiwen.com/i10278482/9b5c3305a1000237.png)
AbstractJackson2HttpMessageConverter中的write
![](https://img.haomeiwen.com/i10278482/b8c621980cd383b8.png)
至此,RequestResponseBodyMethodProcessor的处理返回值流程完毕,那么我们来自己实现下自定义的返回体。
仿照RequestResponseBodyMethodProcessor来试试看
首先我们根据上面源码可知,通过一些方法上的注解可以来判断是否支持处理返回值,那么我们自定义一个annotation interface
![](https://img.haomeiwen.com/i10278482/19544af961c0f654.png)
自定义封装格式类
![](https://img.haomeiwen.com/i10278482/d455cd5951b5b580.png)
自己定义一个处理器来复写RequestResponseBodyMethodProcessor处理器的处理条件和处理方式
![](https://img.haomeiwen.com/i10278482/8177396f27aabec0.png)
向注册自己的处理器
![](https://img.haomeiwen.com/i10278482/184141916dd4c94e.png)
启动下项目找个接口试试看是否能成功
1、添加注解返回:
![](https://img.haomeiwen.com/i10278482/fa970b56c1f10c8f.png)
2、注释注解则不回去处理格式
![](https://img.haomeiwen.com/i10278482/c8f8d5c80b501372.png)
结果ok