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

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

目录

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.lryc.cn/news/297113.html

相关文章:

  • arm 平台安装snort3
  • 【Ubuntu 20.04/22.04 LTS】最新 esp-matter SDK 软件编译环境搭建步骤
  • 【C语言】案例:输出n位水仙花数
  • 代码随想录算法训练营第四十六天(动态规划篇)|01背包(滚动数组方法)
  • 【QT+QGIS跨平台编译】之三十:【NetCDF+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
  • 从0开始图形学(光栅化)
  • B站弹幕分析系统
  • 戴上HUAWEI WATCH GT 4,解锁龙年新玩法
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之StepperItem组件
  • 2024-02-08 Unity 编辑器开发之编辑器拓展1 —— 自定义菜单栏与窗口
  • Intellij IDEA各种调试+开发中常见bug
  • 文件上传-Webshell
  • 掌握虚拟化与网络配置之道:深入浅出VMware及远程管理技巧
  • 【漏洞复现】狮子鱼CMS某SQL注入漏洞
  • Python学习之路-Tornado基础:安全应用
  • 6.0 Zookeeper session 基本原理详解教程
  • 生成式人工智能攻击的一年:2024
  • K8S之Namespace的介绍和使用
  • 封装sku组件
  • Unity笔记:相机移动
  • Java项目管理01-Maven基础
  • 计算机网络(第六版)复习提纲30
  • 基于SSM的图书管理系统
  • 【GAMES101】Lecture 19 相机
  • 《走进科学》灵异事件:Nginx配置改了之后一直报错
  • Select 选择器 el-option 回显错误 value
  • 【51单片机Keil+Proteus8.9】门锁控制电路
  • 比较Kamailio和OpenSIPS的重写contact函数
  • 【ETOJ P1046】斐波那契数列 题解(数学+动态规划)
  • 编码技巧——基于RedisTemplate的RedisClient实现、操作Lua脚本