博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
业务规范之统一异常处理和统一响应
阅读量:4165 次
发布时间:2019-05-26

本文共 3698 字,大约阅读时间需要 12 分钟。

业务规范之统一异常处理和统一响应

###

###
###
###

四、统一异常处理

统一api异常:

public class APIException extends RuntimeException {
private int code; private String message; public APIException(int code, String message){
super(message); this.code = code; this.message = message; } public APIException(String message){
this(ResultEnum.FAILED.getCode(),message); } public APIException(){
this(ResultEnum.FAILED.getCode(),ResultEnum.FAILED.getMessage()); }}

统一异常处理:

@RestControllerAdvicepublic class ExceptionControllerAdvice {
/** * 全局处理参数校验未通过异常 * @return */ @ExceptionHandler(value = MethodArgumentNotValidException.class) public ErrorResponse
methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {
ErrorResponse
errorResponse = new ErrorResponse<>(); // 获得默认消息 String defaultMessage = e.getBindingResult().getAllErrors().get(0).getDefaultMessage(); errorResponse.setFailed(ResultEnum.VALIDATE_FAILED.getCode(), ResultEnum.VALIDATE_FAILED.getMessage()+": "+defaultMessage); return errorResponse; } /** * 全局处理api异常 * @param e * @return */ @ExceptionHandler(value = APIException.class) public ErrorResponse
apiExceptionHandler(APIException e){
ErrorResponse
errorResponse = new ErrorResponse<>(); errorResponse.setFailed(ResultEnum.FAILED.getMessage()+e.getMessage()); return errorResponse; } /** * 全局处理exception * @param e * @return */ @ExceptionHandler(value = Exception.class) public ErrorResponse
exceptionHandler(Exception e){
ErrorResponse
errorResponse = new ErrorResponse<>(); errorResponse.setFailed(ResultEnum.ERROR.getCode(),ResultEnum.ERROR.getMessage()); return errorResponse; }}

五、统一响应

统一响应体:

@RestControllerAdvicepublic class ResponseControllerAdvice implements ResponseBodyAdvice {
/** * 全局处理响应数据 */ @Override public boolean supports(MethodParameter methodParameter, Class
> aClass) {
// 当返回的数据不是BaseResponse 的时候,执行 beforeBodyWrite 方法 // ① 获得返回参数类型 System.out.println(methodParameter); Type genericParameterType = methodParameter.getGenericParameterType(); String typeName = genericParameterType.getTypeName(); String name = "org.springframework.http.ResponseEntity"; // 对swagger的请求不做处理 if (typeName.contains(name)) {
return false; } String typeName2 = ErrorResponse.class.getTypeName(); // 对错误的返回请求不做处理 if (StrUtil.containsAny(typeName, typeName2)){
return false; } // 若是错误的则直接返回 return ! StrUtil.containsAny(typeName, BaseResponse.class.getTypeName()); } /* 只有 supports 方法返回 true的时候才会执行以下方法 */ @Override public Object beforeBodyWrite(Object data, MethodParameter methodParameter, MediaType mediaType, Class
> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
/** * 这里只对正确的做处理 */ BaseResponse baseResponse = new BaseResponse<>(); baseResponse.data =data; if(methodParameter.getGenericParameterType().equals(String.class)){
ObjectMapper objectmapper = new ObjectMapper(); try {
return objectmapper.writeValueAsString(baseResponse); } catch (JsonProcessingException e) {
e.printStackTrace(); throw new APIException("返回String类型错误"); } } return baseResponse; }}

转载地址:http://ihxxi.baihongyu.com/

你可能感兴趣的文章
Java设计模式(5) - 多线程并发设计模式 - 生产者-消费者设计模式多种写法
查看>>
Java多线程(9) - 多线程 - 线程池详解与使用示例
查看>>
Java多线程(10) - 多线程 - CountDownLatch、CyclicBarrier、Semaphore使用示例详解
查看>>
Java多线程(11) - 多线程 - 锁详解:重入锁、公平锁、非公平锁、读写锁、不可重入锁、自旋锁、独享锁、共享锁、互斥锁、悲观锁、乐观锁、分段锁、偏向锁、轻量级锁、重量级锁、CAS算法原理
查看>>
Java网络编程(10) - Netty网络编程常见问题与疑问
查看>>
Spring源码(4) - Spring AOP源码分析
查看>>
Spring源码(5) - Spring事务入门与源码分析
查看>>
大胆的做梦与执行
查看>>
塑造公司管理方式(二)- 招聘、决策
查看>>
设置Django连接到Google Cloud SQL(MYSQL)
查看>>
爬虫: 基于Node.js的强大爬虫,能直接发布抓取的文章哦
查看>>
Django学习笔记 扩展User模型
查看>>
Django资料总结
查看>>
设计模式学习之路-适配器模式
查看>>
github的README.md编写
查看>>
Android手机Fiddler2抓包教程
查看>>
Android进阶系列之事件分发详解
查看>>
Android进阶系列之源码分析Activity的启动流程
查看>>
Android进阶系列-发布项目到Jcenter
查看>>
基于Zxing的二维码扫描解析库——ZxingPlus
查看>>