spring boot / cloud (二) 规范响应格式以及统一异常处理
2017-06-14 10:27
1326 查看
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 { ........省略 //响应ID private 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()); LOGGER.error(exception.getClass().getName(), exception); 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
##结束
然后相关思路和原则,大家可自行搜索
契约优先,由于本身不想在文章中引入太多教条性的东西,主要都是以解决问题的思路为主,所以不深入讨论.
想获得最快更新,请关注公众号
相关文章推荐
- spring boot - cloud (二) 规范响应格式以及统一异常处理
- Spring boot 自定义统一异常处理(以及规范响应格式)
- spring boot - cloud (二) 规范响应格式以及统一异常处理
- 规范响应格式以及统一异常处理
- SpringBoot学习之统一异常处理、404处理以及集成Swagger2
- spring boot / cloud (十二) 异常统一处理进阶
- springBoot的返回code数据的处理以及统一异常处理
- spring boot / cloud (十二) 异常统一处理进阶
- SpringCloud SpringBoot mybatis 分布式微服务(六)Spring Boot中Web应用的统一异常处理
- Spring Cloud Spring Boot mybatis分布式微服务云架构(十一)Web应用的统一异常处理
- (Spring Cloud微服务实战-书中之坑)spring cloud zuul统一处理业务异常,并且需要响应状态为200
- Spring Cloud Spring Boot mybatis分布式微服务云架构(十一)Web应用的统一异常处理
- Spring Cloud Spring Boot mybatis分布式微服务云架构(十一)Web应用的统一异常处理
- spring-boot统一处理返回给前台的数据格式(避免返回异常堆栈信息,干扰用户体验)
- Spring Cloud实战小贴士:Zuul统一异常处理(一)
- spring boot 教程(四) 统一异常处理
- Spring Cloud实战小贴士:Zuul统一异常处理(一)
- Spring Boot中Web应用的统一异常处理
- Spring-Boot 统一异常处理
- Spring Boot 异常统一处理