Spring - 统一返回数据格式
创始人
2024-11-10 03:12:12
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

🫵 今天记得敲代码

相关内容

热门资讯

秒懂普及”珊瑚互娱房卡领取码“... 秒懂普及”珊瑚互娱房卡领取码“王者大厅房间卡怎么购买游戏中心打开微信,添加客服【113857776】...
秒懂教程!我买微信牛牛房卡链接... 斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:71319951许多玩家在游戏中会购买房卡来享受...
正规平台有哪些,怎么买斗牛房卡... 微信游戏中心:火神大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
给大家讲解“购买斗牛房卡联系方... 起点大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...
ia攻略/游戏推荐斗牛房卡出售... ia攻略/游戏推荐斗牛房卡出售长虹大厅/科技房卡多少钱一张Sa9Ix苹果iPhone 17手机即将进...
一分钟实测分享”时光互娱低价获... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...
一分钟了解!牛牛房卡游戏平台加... 微信游戏中心:乐乐堂房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程序...
正规平台有哪些,金花房卡是正规... 海航大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
秒懂教程!微信牛牛房间怎么弄,... 斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:66336574许多玩家在游戏中会购买房卡来享受...
终于找到“微信怎样开炸金花房间... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡来享...
秒懂百科”海洋世界哪里有详细房... 哪里有详细房卡介绍是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:113857776许多玩家在游戏中...
头条推荐!游戏推荐斗牛房卡出售... 头条推荐!游戏推荐斗牛房卡出售新神兽/流樱大厅/微信链接房间卡怎么购买新神兽/流樱大厅是一款非常受欢...
推荐一款!怎么买斗牛房卡朱雀大... 微信游戏中心:朱雀大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程...
玩家攻略,牛牛房卡代理荣耀联盟... 荣耀联盟是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
IA解析/牛牛房卡游戏平台加盟... IA解析/牛牛房卡游戏平台加盟天道联盟/随意玩/微信链接房卡卖家联系方式Sa9Ix苹果iPhone ...
分享经验”百万牛哪里买低价获取... 分享经验”百万牛哪里买低价获取“新老夫子房卡充值游戏中心打开微信,添加客服【113857776】,进...
一分钟了解!金花房卡出售大众互... 今 日消息,大众互娱房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
秒懂教程!微信买链接拼三张房卡... 拼三张是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:56001354许多玩家在游戏中会购买房卡来享...
房卡必备教程“购买金花房卡联系... 新琉璃金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
1分秒分析”茄子娱乐房卡详细充... 第二也可以在游戏内商城:在游戏界面中找到 “微信金花,斗牛链接房卡”“商城”选项,选择房卡的购买选项...