计算机系统应用教程网站

网站首页 > 技术文章 正文

基于Spring Boot的快速开发脚手架的开发(6)

btikc 2024-09-30 13:15:58 技术文章 16 ℃ 0 评论

上一篇描述了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

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表