统一数据封装需要使用到 ResponseBodyAdvice 接口

import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;

ResponseBodyAdvice 接口中有两个方法 supports() 与 beforeBodyWrite()

supports() 作为 beforeBodyWrite() 的开关

beforeBodyWrite() 就是可以在 body 要被写入 HttpResponse 之前,对 body 进行封装

public class ResponseAdvice implements ResponseBodyAdvice {// supports 为 beforeBodyWrite 的开关// true 开启  false 关闭@Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}// 在 Body 写入 HttpResponse 前,进行统一的封装操作@SneakyThrows@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {// 当 body 为 HashMap 类型// 则无需在进行包装if (body instanceof HashMap) {return body;}// 当 body 为 String 类型//使用 ResponseBodyAdvice 进行格式控制之前已经获取了返回值类型 valueType,// 默认的消息转换器列表 String 转换器在 Json 转换器前面,// 所以此处会被 String 转换器处理,泛型将会把 body 强转为 String。// 如果在进行格式转换时 String 被更换为其他对象,就会引发强转失败报错。if (body instanceof String) {return JSONObject.toJSONString(AjaxResult.success(body));}return AjaxResult.success(body);}
}

JSONObject 依赖

<!--JSONObject只是一种数据结构,可以理解为JSON格式的数据结构(key-value 结构),可以使用put方法给json对象添加元素。JSONObject可以很方便的转换成字符串,也可以很方便的把其他对象转换成JSONObject对象。
-->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.46</version>
</dependency>

我这里只将 ResponseBodyAdvice 作为保底的封装,而创建了一个新的类 AjaxResult 来进行多种数据封装方式

public class AjaxResult {// 成功的 ajax 响应public static HashMap<String, Object> success(Object data) {HashMap<String, Object> result = new HashMap<>();result.put("code", 200);result.put("message", "");result.put("data", data);return result;}public static HashMap<String, Object> success(String message, Object data) {HashMap<String, Object> result = new HashMap<>();result.put("code", 200);result.put("message", message);result.put("data", data);return result;}// 失败的 ajax 响应public static HashMap<String, Object> fail(int code, String message) {HashMap<String, Object> result = new HashMap<>();result.put("code", code);result.put("message", message);result.put("data", "");return result;}
}

【SpringSSM项目】搏击俱乐部 统一数据封装相关推荐

  1. 【.NET Core项目实战-统一认证平台】第四章 网关篇-数据库存储配置(2)

    [.NET Core项目实战-统一认证平台]第四章 网关篇-数据库存储配置(2) 原文:[.NET Core项目实战-统一认证平台]第四章 网关篇-数据库存储配置(2) [.NET Core项目实战- ...

  2. 【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)

    [.NET Core项目实战-统一认证平台]第三章 网关篇-数据库存储配置(1) 原文:[.NET Core项目实战-统一认证平台]第三章 网关篇-数据库存储配置(1) [.NET Core项目实战- ...

  3. 【.NET Core项目实战-统一认证平台】第十四章 授权篇-自定义授权方式

    上篇文章我介绍了如何强制令牌过期的实现,相信大家对IdentityServer4的验证流程有了更深的了解,本篇我将介绍如何使用自定义的授权方式集成老的业务系统验证,然后根据不同的客户端使用不同的认证方 ...

  4. 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程...

    上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成acce ...

  5. 【.NET Core项目实战-统一认证平台】第十一章 授权篇-密码授权模式

    上篇文章介绍了基于Ids4客户端授权的原理及如何实现自定义的客户端授权,并配合网关实现了统一的授权异常返回值和权限配置等相关功能,本篇将介绍密码授权模式,从使用场景.源码剖析到具体实现详细讲解密码授权 ...

  6. 【.NET Core项目实战-统一认证平台】第十章 授权篇-客户端授权

    上篇文章介绍了如何使用Dapper持久化IdentityServer4(以下简称ids4)的信息,并实现了sqlserver和mysql两种方式存储,本篇将介绍如何使用ids4进行客户端授权. .ne ...

  7. 【.NET Core项目实战-统一认证平台】第九章 授权篇-使用Dapper持久化IdentityServer4...

    上篇文章介绍了IdentityServer4的源码分析的内容,让我们知道了IdentityServer4的一些运行原理,这篇将介绍如何使用dapper来持久化Identityserver4,让我们对I ...

  8. 【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析

    上篇文章我介绍了如何在网关上实现客户端自定义限流功能,基本完成了关于网关的一些自定义扩展需求,后面几篇将介绍基于IdentityServer4(后面简称Ids4)的认证相关知识,在具体介绍ids4实现 ...

  9. 【.NET Core项目实战-统一认证平台】第七章 网关篇-自定义客户端限流

    上篇文章我介绍了如何在网关上增加自定义客户端授权功能,从设计到编码实现,一步一步详细讲解,相信大家也掌握了自定义中间件的开发技巧了,本篇我们将介绍如何实现自定义客户端的限流功能,来进一步完善网关的基础 ...

最新文章

  1. intellij修改编辑器中的注释部分的颜色
  2. huffman树_笃学不倦|c语言构造哈夫曼树哈夫曼编码
  3. media jquery 适配ios不同手机
  4. ASP.NET中对STA COM组件的不正确调用产生的w3wp远程DoS
  5. JQuery全选反选 随其他checkbox自动勾选全选反选
  6. 虾米音乐的监控体系升级之路
  7. HBase核心知识和应用案例
  8. kotlin的loop和Range、list和map
  9. beaTunes5的关键词的检测分析
  10. 关键路径转化率分析——漏斗模型
  11. JavaScript(JS)--基础2(基本语法、字面量和变量、标识符、强制类型转换)
  12. 中国科学院大学2019年高等代数考研试题
  13. selenium浏览器驱动下载地址
  14. 【无标题】【光纤光缆小知识】多模光纤的分类及应用
  15. Tensorflow serving 学习(一)
  16. DDD到底是不是毒瘤?
  17. 深入理解java虚拟机(十三)Java Mission Control:可持续在线的监控工具
  18. 来说一下!线雕的副作用和危害有哪些?妈耶
  19. NOI 1789:算24
  20. Linux内核驱动基础-设备树相关总线使用

热门文章

  1. linux按键驱动设计(V3S开发板)
  2. 用python的Django框架写大乐透数据采集预测系统
  3. 面向对象方法学的优点
  4. 感谢JetBrains
  5. 山东理工大学首页html
  6. Kali中间人攻击(原理)
  7. 2016年小结 2017年展望
  8. linux里返回状态命令行,Shell $?获取函数返回值或者上一个命令的退出状态
  9. Linux 查找文件位置命令
  10. 注解之Documented