网站首页 > 技术文章 正文
上一篇描述了RESTful接口的返回值格式(协议)统一的方式。
那么这个统一的包装方式,从习惯上来说不应该由框架使用者进行手动包装,而是应该是开发框架提供。所以开发框架的下一个组件就是自动封装统一返回格式的功能组件。
如果想要对返回值进行包装,那么首先会想到是使用ResponseBodyAdvice类对返回对象进行拦截和包装。代码如下:
但是如果返回为void,那么ResponseBodyAdvice将无法拦截到请求,这时候就需要使用到HttpServletResponseWrapper对请求的返回进行拦截,并直接修改Response stream。
关键代码如下:
如果Response使用的是stream输出,那么这里将输出流重定向到自己定义的输出流上,最终输出到bytes对象中,这个自定以输出流代码如下:
其实就是一个简单的ServletOutputStream。
如果Response使用writer进行数据输出,那么这里依然会包装输出流最终输出到bytes对象中。
所以最终,bytes对象中将最终得到Response中输出的结果,然后通过下面方法获取
这样就可以对Response中的数据进行处理了。
OK, 回到主题上,那么怎么使用这个HttpServletResponseWrapper呢,看这里:
只需要再过滤器中包装当前的response,然后使用getBytes()方法获取输出数据,再修改获取到的bytes对象,最后将bytes回写到response(是response,不是responseWrapper)即可。
代码参考:
https://github.com/dean2015/chinacat-boot-starter-autoboxing
猜你喜欢
- 2024-09-30 快速搭建 SpringCloud 微服务开发环境的脚手架
- 2024-09-30 基于 SpringBoot 的 Api 服务器脚手架
- 2024-09-30 Springboot+Mysql在线拍卖竞价拍卖竞拍系统源码附带运行视频教程
- 2024-09-30 Springboot+Mysql舞蹈课程在线预约系统源码附带视频运行教程
- 2024-09-30 基于Spring Boot的快速开发脚手架的开发(5)
- 2024-09-30 史上最详细的SpringBoot教程 springboot步骤
- 2024-09-30 微服务脚手架zuihou-admin-cloud 微服务框架选型
- 2024-09-30 SpringBoot+Mysql羽毛球馆在线预约系统源码+运行视频教程
- 2024-09-30 【学】alibaba initializr 生成脚手架
- 2024-09-30 以SpringBoot2为基础,打造一个快速开发的Web应用脚手架Crown
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)