首页 > 作文

解析springboot包装controller返回值问题

更新时间:2023-04-04 04:42:12 阅读: 评论:0

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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图