Spring - 统一返回数据格式
创始人
2024-11-10 03:38:50
0

在这里插入图片描述

T04BF

👋专栏: 算法|JAVA|MySQL|C语言

🫵 今天你敲代码了吗

文章目录

      • 1. 使用
      • 2. 字符串问题
        • 2.1 解决方法:
        • 2.2 问题分析


有时候后端返回的响应可能是String,Boolean之类的类型,但是我们希望响应将可能描述清除,如失败的原因等
由于一次只能返回一个对象,因此就要将返回结果封装起来

@Data public class Result {     private ResultCodeEnum code;     private String msg;     private T data;       public static  Result success(T data) {         Result result = new Result<>();         result.setCode(ResultCodeEnum.SUCCESS);         result.setMsg("成功");         result.setData(data);         return result;     }      public static  Result fail(String errMsg) {         Result result = new Result();         result.setCode(ResultCodeEnum.FAIL);         result.setMsg(errMsg);         result.setData(null);         return result;     }        public static  Result paramError() {         Result result = new Result();         result.setCode(ResultCodeEnum.ParamERROR);         result.setMsg("参数错误");         result.setData(null);         return result;     } } 

但是对于每个请求的响应,都要进行这样的封装,就会很麻烦
Spring提供了统一返回数据格式的功能

1. 使用

统一返回的数据格式使用@ControllerAdvice,
实现类ResponseBodyAdvice接口

@ControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice {     @Override     public boolean supports(MethodParameter returnType, Class converterType) {         return true;     }      @Override     public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {         return Result.success(body);     } } 
  • supports方法:判断是否要执行beforeBodyWrite方法.true为执行,false就不执行,可以从returnType中获取类名和方法名,可以选择哪些类或哪些方法的Response要进行处理
  • beforeBodyWrite:对Response方法进行具体的操作处理

2. 字符串问题

如果我们的接口是这样的
image.png
此时访问:
image.png
看到日志:
image.png
提到Result不能被映射到String

2.1 解决方法:
@Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {     if(body instanceof String){         try {             if("SUCCESS".equals(body)){                 response.getHeaders().setContentType(MediaType.APPLICATION_JSON);                 return objectMapper.writeValueAsString(Result.success(body));             }else {                 return objectMapper.writeValueAsString(Result.paramError());             }         } catch (JsonProcessingException e) {             throw new RuntimeException(e);         }     }     return Result.success(body); } 

就是要对String的返回类型进行特殊处理,转成JSON字符串

2.2 问题分析

参考博客:关于Spring统一返回数据格式中String的问题


感谢您的访问!!期待您的关注!!!

在这里插入图片描述

T04BF

🫵 今天记得敲代码

相关内容

热门资讯

针对!微信新众游辅助(辅助)果... 针对!微信新众游辅助(辅助)果然是真的有辅助教程(有挂细节)1、游戏颠覆性的策略玩法,独创攻略技巧玩...
黑科技辅助挂!微信牵手跑的快辅... 黑科技辅助挂!微信牵手跑的快辅助(辅助)竟然真的是有辅助器(今日头条)小薇(辅助器软件下载)致您一封...
据公告内容!乐酷大厅怎么安装(... 据公告内容!乐酷大厅怎么安装(辅助)一直是有辅助软件(真是有挂)1、完成乐酷大厅怎么安装有辅助插件,...
今年以来!新超圣辅助靠谱不(辅... 今年以来!新超圣辅助靠谱不(辅助)好像是真的有辅助教程(有挂神器)1、全新机制【新超圣辅助靠谱不ai...
据权威媒体报道!老友赣州麻将破... 据权威媒体报道!老友赣州麻将破解版(辅助)果然是有辅助神器(有挂猫腻)1、玩家可以在老友赣州麻将破解...
此事引发网友热议!闲聚鱼虾蟹软... 此事引发网友热议!闲聚鱼虾蟹软件脚本(辅助)真是真的是有辅助挂(有挂技术)1、用户打开应用后不用登录...
事发当天!边锋干瞪眼辅助器(辅... 事发当天!边锋干瞪眼辅助器(辅助)真是存在有辅助方法(有挂实锤)1、边锋干瞪眼辅助器免费辅助多个强度...
为了进一步!欢乐联盟免费辅助(... 为了进一步!欢乐联盟免费辅助(辅助)一直是有辅助软件(有挂助手)运欢乐联盟免费辅助辅助工具,进入游戏...
复盘辅助挂!和和营口辅助(辅助... 复盘辅助挂!和和营口辅助(辅助)果然是真的有辅助器(今日头条)和和营口辅助是不是有人用挂微扑克wpk...
技巧辅助挂!极速摇一摇鱼虾蟹辅... 技巧辅助挂!极速摇一摇鱼虾蟹辅助(辅助)一贯确实有辅助软件(有挂神器)极速摇一摇鱼虾蟹辅助透视方法中...