统一数据格式返回,统一异常处理

目录

1.统一数据格式返回

2.统一异常处理

3.接口返回String类型问题


1.统一数据格式返回

  1. 添加@ControllerAdvice注解
  2. 实现ResponseBodyAdvice接口
  3. 重写supports方法,beforeBodyWrite方法
/*** 统一数据格式返回的保底类 对于一些非对象的数据的再统一 即非对象的封装成对象再返回*/
@ControllerAdvice //控制器通知类
public class ResponseAdvice implements ResponseBodyAdvice {@Autowiredprivate ObjectMapper objectMapper;/*** 开关* true表示返回结果作统一处理* false不处理*/@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) {if(body instanceof AjaxResult) {return body;}// 字符串比较特殊 是由于序列化问题导致// 对于字符串类型,可以使用SpringBoot提供的Jackson实现信息的序列化if(body instanceof String) {return objectMapper.writeValueAsString(body);}return AjaxResult.success("",body);}
}

String类型需要特殊处理的原因:类型转换异常。即序列化问题。

 由于我设置了统一返回类(code,msg,data),String类型的数据在上面第一步(返回的body中)就已经被包装成一个对象了,后续传参也都是泛型,直到调用 addDefaultHeaders 方法,接收却是String类型的。对象是不能自动转成String类型的。并且是String类型才会走上面的流程。

解决办法就是使用SpringBoot提供的Jackson库,可以将对象转成Json格式的字符串。即序列化。


2.统一异常处理

  1. 加ControllerAdvice注解(控制器通知类)
  2. 加ResponseAdvice注解(类上或方法上,表示返回的是非页面的数据)
  3. 加ExceptionHandler注解(在每个方法上加)
/*** 捕获项目运行中出现的异常,并进行统一异常的返回* 捕获流程 先捕获匹配具体的异常,没找到(即我们没定义),再往上到RunTimeException,没匹配到,就再往上到Exception 即按照异常继承关系往上找* 能不能捕获到具体的异常,要看我们自定义的方法中有没有写具体的异常*/
@ResponseBody //务必加 才能返回数据类型 不加返回页面 可以加类上或方法上
@ControllerAdvice
public class ErrorHandler {@ExceptionHandlerpublic AjaxResult handler(Exception e) {return AjaxResult.fail("内部发生异常");}@ExceptionHandlerpublic AjaxResult handler(RuntimeException e) {return AjaxResult.fail("内部发生异常");}@ExceptionHandlerpublic AjaxResult handler(NullPointerException e) {return AjaxResult.fail("空指针异常");}@ExceptionHandlerpublic AjaxResult handler(ArithmeticException e) {return AjaxResult.fail("算术异常");}}

3.接口返回String类型问题

接口返回String类型的数据时,需要转Json格式 。所以尽量少用,直接将String类型的数据包装在对象中返回即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/676384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Verilog刷题笔记28

题目: A “population count” circuit counts the number of 1’s in an input vector. Build a population count circuit for a 255-bit input vector. 解题: module top_module( input [254:0] in,output [7:0] out );int i;always(*)beginout8b0;…

java实战:销售订单号自动生成

本文将介绍如何使用Java实现一个销售订单号的自动生成系统,该系统能够在高并发环境下保证订单号的唯一性。我们将探讨几种常见的订单号生成策略,并实现一个基于数据库的唯一性检查的解决方案。通过本文,可以了解到如何在Java应用程序中生成唯…

手把手教你开发Python桌面应用-PyQt6图书管理系统-图书添加模块-图书类别ComboBox下拉框初始化数据实现

锋哥原创的PyQt6图书管理系统视频教程: PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频&…

如何手机搜大学生答案? #笔记#微信

今天我就分享几款搜题软件和搜题网站给大家,每一款都能轻松搜索题目,让大家快速找到精准的答案,有需要的小伙伴快点赞收藏起来,防止需要的时候找不到啦。 1.试题猪 这个是公众号 涵盖初大学/专升本/考研…

完美运营的最新视频打赏系统及附带教程

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买) 优于市面上95%的打赏系统,与其他打赏系统相比,功能更加强大,完美运营且无bug。支付会调、短链接生成、代理后台、价…

突破编程_C++_基础教程(类的基础知识)

1 面向对象 面向对象( Object-Oriented ,简称 OO )是一种编程思想,它使用对象的理念来设计软件和构建程序。面向对象编程( Object-Oriented Programming ,简称 OOP )是这种思想的具体实现方式。…

LeetCode1365之切披萨的方案数(相关话题:二维前缀和,动态规划)

题目描述 给你一个 rows x cols 大小的矩形披萨和一个整数 k ,矩形包含两种字符: A (表示苹果)和 . (表示空白格子)。你需要切披萨 k-1 次,得到 k 块披萨并送给别人。 切披萨的每一刀&#xf…

vscode开发FPGA(0)--windows平台搭建

一、从官网下载安装VScode Download Visual Studio Code - Mac, Linux, Windows 二、安装配置插件 1. 安装Chinese(simplified)中文汉化包 2.安装Verilog-HDL/systemVerilog插件(支持verilog语法) 3.配置CTags Support插件(支持代码跳转) 1)在github下…

MySQL篇之定位与优化MySQL慢查询

一、如何定位慢查询 1.方案一:开源工具 调试工具:Arthas。 运维工具:Prometheus 、Skywalking。 2.方案二:MySQL自带慢日志 慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:…

Backtrader 文档学习- Plotting -Plotting on the same axis

Backtrader 文档学习- Plotting -Plotting on the same axis 1.概述 在同一轴上绘图,绘图是在同一空间上绘制原始数据和稍微(随机)修改的数据,但不是在同一轴上。 核心代码,data数据正负50点。 # The filter which changes the close pri…

(50)矩阵对角线元素的和

文章目录 每日一言题目解题思路法一:法二: 代码法一:法二: 结语 每日一言 高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 题目 题目链接:矩阵对角线元素的和 给你一个正方形矩…

力扣热门100题 - 5.最长回文子串

力扣热门100题 - 5.最长回文子串 题目描述:示例:提示:解题思路:(动态规划)代码: 题目链接:5. 最长回文子串 题目描述: 给你一个字符串 s,找到 s 中最长的回…

[day0] 借着“ai春晚”开个场

1 文思ai笔记-新的开始 今天是2024年2月29日,也是传统农历的除夕夜。早起在ai圈看到一个比较新奇的消息,ai春晚今日举办,竟然有一点小小的激动。这些年确实好久没看过春晚了,自己对于春晚的映像还停留在“白云黑土”、“今天&…

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(六)

原文:Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者:飞龙 协议:CC BY-NC-SA 4.0 第十四章:使用卷积神经网络进行深度计算机视觉 尽管 IBM 的 Deep Blue 超级计算机在 1996 年击败了国际象棋世界冠军…

【51单片机】烧写教程:将代码下载到单片机中(图示&解析)

前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 这是LCD基本实验中的一部分,完整实验传送门如下:传送门 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是…

初始web服务器(并基于idea来实现无需下载的tomcat)

前言 前面学习了对应的http协议,我们知道了他是在网络层进行数据传输的协议,负责相应数据以及接收数据的规则,但是在人员开发后端的时候不仅仅需要你写io流进行数据传输,还需要你进行对应的tcp协议来进行数据打包发送http协议-CSD…

MySQL运维实战(6)用户认证插件caching_sha2_password

作者:俊达 用户认证及连接错误解决 MySQL用户认证可以使用几种不同的方式,创建用户时可以制定认证方式: create user username% identified with auth_plugin by passwordauth_plugin: mysql_native_password sha256_password caching_sh…

横扫Spark之 - 22个常见的转换算子

水善利万物而不争,处众人之所恶,故几于道💦 文章目录 1. map()2. flatMap()3. filter()4. mapPartitions()5. mapPartitionsWithIndex()6. groupBy()7. distinct()8. coalesce()9. repartition()10. sortBy()11. intersection()12.union()13.…

IT行业有哪些证书含金量高呢?

目录 引言: 一、 计算机网络类证书 二、 数据库管理类证书 三、 安全与信息技术管理类证书 四、 编程与开发类证书 五、 数据科学与人工智能类证书 六、结论: 悟已往之不谏,知来者犹可追 …

c#安全-nativeAOT

文章目录 前记AOT测试反序列化Emit 前记 JIT\AOT JIT编译器(Just-in-Time Complier),AOT编译器(Ahead-of-Time Complier)。 AOT测试 首先编译一段普通代码 using System; using System.Runtime.InteropServices; namespace co…