拿去用,接口统一返回值,最简单的一种实现 您所在的位置:网站首页 java返回值怎么用 拿去用,接口统一返回值,最简单的一种实现

拿去用,接口统一返回值,最简单的一种实现

2023-09-28 11:59| 来源: 网络整理| 查看: 265

文末可以领取《尚硅谷Java学科全套教程(总207.77GB)》。

大家好,我是路人,这是 SpringMVC 系列第 19 篇。

目录

1、前言

2、接口如何实现统一返回值?

3、案例:通过 RequestBodyAdvice 实现统一返回值

3.1、git 代码位置

3.2、定义返回值的通用类型

3.3、自定义一个 ResponseBodyAdvice

3.4、来个 controller 测试效果

3.5、验证接口输出

4、多个 ResponseBodyAdvice 指定顺序

5、@ControllerAdvice 指定增强的范围

6、ResponseBodyAdvice 原理

7、留个问题

8、SpringMVC 系列目录

9、更多好文章

10、尚硅谷Java学科全套教程(总207.77GB)

1、前言

上一篇中介绍了 RequestBodyAdvice 接口,可以对@RequestBody 进行增强,本文介绍另外一个相似的接口:ResponseBodyAdvice,这个可以对@ResponseBody 进行增强,可以拦截@ResponseBody 标注的方法的返回值,对返回值进行统一处理,比如进行加密、包装等操作;比如通过他可以实现统一的返回值。

2、接口如何实现统一返回值?

要求系统中所有返回 json 格式数据的接口都需要返回下面格式的数据。

{   "success": true,   "code": null,   "msg": "操作成功!",   "data": 具体的数据 }

但是咱们系统中所有的接口返回值都是下面这种格式的,难道咱们要一个个去手动改一下接口的返回值么?

b37c0fa8e7b2973773de079bb83ae59c.png

SpringMVC 为我们提供了更简单的方法,此时我们可以使用 RequestBodyAdvice 来实现,拦截所有@ResponseBody 接口,将接口的返回值包装一下,包装为统一的格式返回,下面来看具体代码如何实现。

3、案例:通过 RequestBodyAdvice 实现统一返回值 3.1、git 代码位置 https://gitee.com/javacode2018/springmvc-series

eed7bd0598c6c528d5eb0c5b08332919.png

3.2、定义返回值的通用类型 package com.javacode2018.springmvc.chat14.dto; /**  * rest接口通用返回值数据结构  *  * @param   */ public class ResultDto {     //接口状态(成功还是失败)     private Boolean success;     //错误码     private String code;     //提示信息     private String msg;     //数据     private T data;     public Boolean getSuccess() {         return success;     }     public void setSuccess(Boolean success) {         this.success = success;     }     public String getCode() {         return code;     }     public void setCode(String code) {         this.code = code;     }     public String getMsg() {         return msg;     }     public void setMsg(String msg) {         this.msg = msg;     }     public T getData() {         return data;     }     public void setData(T data) {         this.data = data;     }     public static  ResultDto success(T data) {         return success(data, "操作成功!");     }     public static  ResultDto success(T data, String msg) {         ResultDto result = new ResultDto();         result.setSuccess(Boolean.TRUE);         result.setMsg(msg);         result.setData(data);         return result;     }     public static  ResultDto error(String msg) {         return error(null, msg);     }     public static  ResultDto error(String code, String msg) {         return error(code, msg, null);     }     public static  ResultDto error(String code, String msg, T data) {         ResultDto result = new ResultDto();         result.setSuccess(Boolean.FALSE);         result.setCode(code);         result.setMsg(msg);         result.setData(data);         return result;     } } 3.3、自定义一个 ResponseBodyAdvice package com.javacode2018.springmvc.chat14.config; import com.javacode2018.springmvc.chat14.dto.ResultDto; import org.springframework.core.MethodParameter; import org.springframework.core.io.Resource; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; import java.util.HashSet; import java.util.Set; @ControllerAdvice public class ResultDtoResponseBodyAdvice implements ResponseBodyAdvice {     //不支持的类型列表     private static final Set[] basePackageClasses() default {};  /**   * 用来指定Controller需要满足的类型,满足assignableTypes中指定的任意一个就可以   */  Class[] assignableTypes() default {};  /**   * 用来指定Controller上需要有的注解,满足annotations中指定的任意一个就可以   */  Class


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有