spring boot / cloud (二) 规范响应格式以及统一异常处理

前言

为什么规范响应格式?

我认为,采用预先约定好的数据格式,将返回数据(无论是正常的还是异常的)规范起来,有助于提高团队间接口对接的效率(前端和后端,后端和后端等).

思路

  • 自定义统一的ResposeBody类 : 用于统一响应格式

  • 自定义统一的Error类 : 用于统一异常格式

  • 自定义异常 : 区分不同场景的异常

  • 实现ExceptionHandler : 用于拦截处理异常

实现

1.创建ErrorResult类

public class ErrorResult implements Serializable {........省略//异常发生时间private Date exceptionDate;//异常类名private String exceptionType;//异常描述private String exceptionMessage;//异常堆栈private String exceptionStackTrace;........省略}

2.创建RestResponse类

使用泛型,来适应不同类型的结果集

响应代码和响应描述,可自定义枚举来规范

注意,一定有留有无参的构造函数,否则json转换会报错

public class RestResponse<T> implements Serializable {........省略//响应IDprivate String id = UUID.randomUUID().toString();//响应代码private String code = "SUCCESS";//响应描述private String message = "操作成功";//响应体private T result = null;//错误体private ErrorResult error = null;//构造函数public RestResponse() {super();}//构造函数public RestResponse(ErrorCode errorCode, ErrorResult error) {super();this.code = errorCode.name();this.message = errorCode.value();this.error = error;}........省略}

3.自定义异常

检查型异常

public class SystemException extends Exception {........省略
}

运行时异常

public class SystemRuntimeException extends RuntimeException {........省略
}

其他类型异常,如:认证异常,权限异常,参数校验异常,等等,按需定义

public class AuthException extends RuntimeException {........省略
}

4.创建ExceptionMapping类

@ControllerAdvice
public class ExceptionMapping {........省略
}

定义私有的方法构造ErrorResult

private ErrorResult buildError(Exception exception) {ErrorResult error = new ErrorResult();error.setType(exception.getClass().getName());error.setMessage(ExceptionUtils.getMessage(exception));error.setStackTrace(ExceptionUtils.getStackTrace(exception));error.setDate(new Date());return error;
}

按照异常类型,拦截处理异常,拦截的优先级遵循类的集成关系,优先拦截子类异常

@ExceptionHandler(value = 要拦截的异常.class)
@ResponseStatus(响应状态)
@ResponseBody
public RestResponse<String> exception(要拦截的异常 exception) {return new RestResponse<>(ErrorCode.ERROR, buildError(exception));
}

这里提醒注意点,如果想要拦截404错误的话,需要在spring boot中做如下设置

spring.mvc.throw-exception-if-no-handler-found=true
spring.resources.add-mappings=false

代码仓库 (博客配套代码)

  • udf-starter : 基础项目,脚手架,框架

  • udf-sample : 集成样例

结束

然后相关思路和原则,大家可自行搜索契约优先,由于本身不想在文章中引入太多教条性的东西,主要都是以解决问题的思路为主,所以不深入讨论.


想获得最快更新,请关注公众号

转载于:https://www.cnblogs.com/itkk/p/7442119.html

spring boot / cloud (二) 规范响应格式以及统一异常处理相关推荐

  1. spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求

    有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧, 但是细想想,是真的么?,忙到这几个字都没时间打么?毕竟大家都很忙的,所以忙并不是啥理由. 那是因为啥呢? ...

  2. Spring Boot/Cloud 界面与安全设计

    Spring Boot/Cloud 界面与安全设计 一.后端渲染 Thymeleaf 二.后端渲染 Freemarker 三.后端渲染 jsp 四.前端渲染 vue 五.原生 json 请求(自) 六 ...

  3. Spring/Boot/Cloud系列知识:SpringMVC 传参详解(下)

    (接上文<Spring/Boot/Cloud系列知识:SpringMVC 传参详解(上)>) 2.3.通过@PathVariable注解基于URL匹配符接收请求传参 为了便于开发人员实现更 ...

  4. Spring Boot/Cloud干货汇总(持续更新:20180226版)

    抽空对本号推送的Spring相关内容做个汇总整理,包括: - Spring - Spring Boot - Spring cloud - 其他Spring干货内容 Spring Boot专题 基础入门 ...

  5. spring boot / cloud (十七) 快速搭建注册中心和配置中心

    spring boot / cloud (十七) 快速搭建注册中心和配置中心 本文将使用spring cloud的eureka和config server来搭建. 然后搭建的模式,有很多种,本文主要聊 ...

  6. Spring/Boot/Cloud系列知识(2)— — 代理模式

    本文转自:https://blog.csdn.net/yinwenjie/article/details/77848285 代理模式是23种设计模式中的一种,属于一种结构模式.用一句大白话解释这个设计 ...

  7. Spring/Boot/Cloud系列知识:SpringMVC进行HTTP信息接收和发送的过程(1)

    1.整体调用过程 本文承接本专题上一篇文章<Spring/Boot/Cloud系列知识:HttpMessageConverter转换器使用方式>,在上一篇文章中讲解了HttpMessage ...

  8. 重拾后端之Spring Boot(二):MongoDB的无缝集成

    重拾后端之Spring Boot(一):REST API的搭建可以这样简单 重拾后端之Spring Boot(二):MongoDb的无缝集成 重拾后端之Spring Boot(三):找回熟悉的Cont ...

  9. 【转帖】是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了。

    是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了. 2019/01/03 http://www.ityouknow.com/springboot/2019/01/03/spr ...

最新文章

  1. kd树 python实现_Python KD树实现+简单的KNN实现
  2. 1000亿产值、2500万辆销售目标,范迪塞尔代言的雅迪将如何正确“出海”?
  3. 简单弄一个-个人主页
  4. cf1562E. Rescue Niwen!
  5. recv, recvfrom, recvmsg
  6. 输入手机号码 和 金额有效性的判断
  7. 【IT】计算机基础知识
  8. 遇到一个不得其解的问题。
  9. Oracle中connect by...start with...的使用
  10. 电子工程师不得不读的十大经典书籍
  11. react中p标签_React 2020 p1简介和安装
  12. 服务器地址显示169.254,IP地址是169.254开头的
  13. 什么是SaaS?SaaS系统有什么特征?
  14. 第十四篇、贪吃蛇小游戏的制作
  15. 网线 绿灯长亮 黄灯不亮
  16. java 判断cmyk_Java判断图片是grb还是cmyk
  17. 九轴传感器姿态----AHRS算法开源项目推荐
  18. 十二周四次课(6月11日)
  19. 0pyqt获取textEdit控件的文本
  20. Java遍历jar包所有类-后续

热门文章

  1. 卫星轨道推演计算相关知识点总结(含欧拉角、旋转矩阵、及各坐标系转化等)
  2. Android 12正式发布:安卓历史最大设计变化、更流畅了!
  3. 女人心中真正男人具有的十大特征
  4. 计算机视觉库OpenCV中shape和resize函数的区别
  5. 服务器损坏文件怎么办,服务器文件系统损坏的处理
  6. linux系统中使用chattr命令的,chattr命令怎么用
  7. Andriod anim translate中的属性介绍
  8. docker删除镜像命令_第三章 Docker常用命令之镜像命令
  9. String,StringBuffer和StringBuilder区别?
  10. 如何保证RabbitMQ消息队列的高可用?