当前位置: 首页 > news >正文

Spring项目中的统一结果返回

本文介绍的是通过Spring提供的接口进行结果统一封装,指的是成功返回的结果,不包含异常或者错误情况(这一块移步到统一异常处理)。另一种统一结果返回的方式,就是手动让每个接口的返回中类型都相同,这种方法相信大家都会,就不介绍了。

1.实现步骤

下面是成功结果的统一返回,项目中需要与统一异常(返回失败的结果)一起进行搭配。

(1)第一步:实现对应接口重写方法,并加上注解

import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
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;@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return false;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {return null;}
}

上述是基本的模版

(2)第二步:同意支持统一返回格式

 @Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}

直接返回true表明所有的方法都支持统一结果返回

(3)第三步:封装统一返回结果

需要一个统一返回的对象

import lombok.Data;@Data
public class Result {private String message;private int code;public Result(String message,int code) {this.message = message;this.code = code;}public static Result fail(String message) {return new Result(message,1314);}public static Result success(String message) {return new Result(message,1314);}}

结果封装:修改beforeBodyWrite方法

@ControllerAdvice
public class ResponseAdvice implements ResponseBodyAdvice {@Autowiredprivate ObjectMapper objectMapper;@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}@SneakyThrows@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType,MediaType selectedContentType, Class selectedConverterType,ServerHttpRequest request, ServerHttpResponse response) {//1.封装返回类型为String的--转成json再封装if(body instanceof String) {return objectMapper.writeValueAsString(Result.success(body));}//2.返回类型已经是封装的结果--直接返回if(body instanceof Result) {return Result.success(body);}//3.封装return Result.success(body);}
}

根据以上的步骤,就可以使用了。

上述当返回类型为String的时候,还会存在一个坑,下面通过实例介绍。

2.实现后的效果

(1)没加入统一结果返回时

通过postman测试:

(2)加入同一结果返回后

统一回答:在上述的统一结果返回中,如果返回值类型是String类型,我们需要先转化成json再进行封装,否则会报异常(源码内部问题,无需知道),也就是下面这样

但是进行封装后返回的是一个字符串格式,而不是json格式,所以我们需要在该方法上指定返回的数据类型

返回结果:

掌握以上的几步,在项目中页完全够用了。


http://www.mrgr.cn/news/37114.html

相关文章:

  • windows电脑git提交告警:LF will be replaced by CRLF the next time Git touches it
  • 软件测试框架实战:Python+Slenium搭建Web自动化测试框架全教程
  • 【移植】标准系统方案之瑞芯微RK3568移植案例(二)
  • 华为源NAT技术与目的NAT技术
  • 每日一练:二叉树的右视图
  • 【yolov8】模型导出----pytorch导出为onnx模型
  • Maya没有Arnold材质球
  • 第13讲 实践:设计SLAM系统
  • dependencyManagement的作用
  • 探索词向量的奥秘:自然语言处理的基石
  • Java.动态代理
  • JS面试真题 part7
  • 数据清洗与数据治理的关系
  • [附源码]在线音乐系统+SpringBoot+Vue前后端分离
  • 新手上路:Anaconda虚拟环境创建和配置以使用PyTorch和DGL
  • 第三十篇——总结:成功的捷径是没有捷径
  • Linux 学习 awk 和sed 命令使用
  • 操作配置笔记
  • 职业技能大赛-单元测试笔记(assertThat)分享
  • 【Vue】Vue3 的初始化过程