1、springboot项目统一包装返回值,通常返回结果包含code、message、data,结构如下
import lombok.allargsconstructor;import lombok.data;import lombok.noargsconstructor; @data@noargsconstructor@allargsconstructorpublic class responresult<t> { private int code; private string message; private t data; public responresult(t data) { this.data = data; this.code = 0; this.message = "success"; }}
2、基于controlleradvice和httpmessageconverter实现
定义类responadvisor实现responbodyadvice接口,重写supports跟beforebodywrite方法
import org.springframework.core.methodparameter;import org.springframework.http.mediatype;import org.springframework.http.responentity;import org.springframework.http.converter.httpmessageconverter;import org.springframework.http.rver.rverhttprequest;import org.springframework.http.rver.rverhttprespon;import org.springframework.web.bind.annotation.controlleradvice;import org.springframework.web.rvlet.mvc.method.annotation.responbodyadvice; @controlleradvicepublic class responadvisor implements responbodyadvice<object> { @override public boolean supports(methodparameter methodparameter, class<? extends httpmessageconverter<?>> aclass) { return true; } @override public object beforebodywrite(object o, methodparamete差异点r methodparameter, mediatype mediatype, class<? extends httpmessageconverter<?>> aclass, rverhttprequest rverhttprequest, rverhttprespon rverhttprespon) { if(o instanceof responresult){ return o; } return new responresult<>(o); }
3、接口测试
3.1 测试返回object类型:
@restcontroller@requestmapping("/test")public clas一年级上册语文教案s testcontroller { @getmapping("/test") public test test(){ return new test("test", 10); }}
执行结果如下:
3.2 测试返回string类型:
@restcontroller@requestmapping("/tes四级及格分数t")public class testcontroller { @getmapping("/test") public test test(){ return new test("te全国消防宣传日st", 10); } @getmapping("/test1") public string test1(){ return "test"; }}
执行结果如下:
3.3 如果controller类的返回值没有string类型的,仅有上面这个类就够了。如果有string类型的返回值,就有可能遇到类型不匹配的问题。httpmessageconverter是根据controller的原始返回值类型进行处理的,而我们在responadvisor中改变了返回值的类型。如果httpmessageconverter处理的目标类型是object还好说,如果是其它类型就会出现问题,其中最容易出现问题的就是string类型,因为在所有的httpmessageconverter实例集合中,stringhttpmessageconverter要比其它的converter排得靠前一些。我们需要尝试将处理object类型的httpmessageconverter放得靠前一些,这可以在一个configuration类中完成:
import org.springframework.context.annotation.configuration;import org.springframework.http.converter.httpmessageconverter;import org.springframework.http.converter.json.mappingjackson2httpmessageconverter;import org.springframework.web.rvlet.config.annotation.delegatingwebmvcconfiguration; import java.util.list; @configurationpublic class responresu立秋诗句ltconfig extends delegatingwebmvcconfiguration { @override protected void configuremessageconverters(list<httpmessageconverter<?>> converters) { converters.add(0, new mappingjackson2httpmessageconverter()); super.configuremessageconverters(converters); }}
3.4重启服务后再次测试返回string类型,返回结果如下:
3.5 测试返回其他基本数据类型,也都没问题。
下篇写全局业务异常封装,加油!
到此这篇关于springboot包装controller返回值的文章就介绍到这了,更多相关springboot包装controller返回值内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 04:42:11,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/b4088ebcbc3959026d294a814cbf4c79.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:解析springboot包装controller返回值问题.doc
本文 PDF 下载地址:解析springboot包装controller返回值问题.pdf
留言与评论(共有 0 条评论) |