spring boot统一处理结果(含异常)
2017-08-21 12:10
846 查看
1.定义返回结果模板
public class Result<T> { /* 状态码 */ private String code; /* 提示信息 */ private String msg; /* 返回的数据 */ private T data; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public T getData() { return data; } public void setData(T data) { this.data = data; } }
2.自定义异常
public class MyException extends RuntimeException{ private static final long serialVersionUID = 7112519404688544220L; /* 状态码 */ private String code; public MyException (String code,String msg){ super(msg); this.code = code; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } }
3.统一异常处理
@ControllerAdvice public class ExceptionHandle { private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.clas 4000 s); @ExceptionHandler(value=MyException.class) @ResponseBody public Result<Object> exceptionHandle(Exception e){ if(e instanceof MyException){ MyException mye = (MyException)e; return ResultUtil.error(mye.getCode(), mye.getMessage()); }else{ logger.error("【系统异常】{}", e); return ResultUtil.error("-1", "未知错误"); } } }
4.统一结果处理
@ControllerAdvice public class ResultHandle implements ResponseBodyAdvice<Object> { @Override public boolean supports(MethodParameter methodParameter, Class<? extends HttpMessageConverter<?>> aClass) { return true; } @SuppressWarnings("unchecked") @Override public Object beforeBodyWrite(Object object, MethodParameter methodParameter, MediaType mediaType, Class<? extends HttpMessageConverter<?>> aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { if(object instanceof Result){ Result<Object> result = (Result<Object>) object; if(!result.getCode().equals("0")){ return result; } } return ResultUtil.success(object); } }
5.测试
utilpublic class ExceptionUtil { public static void throwError(String code){ throw new MyException(code,PropertiesUtil.errRes.getString(code)); } public static void throwError(String code,String message){ throw new MyException(code,message); } }
public class PropertiesUtil { public static PropertyResourceBundle errRes = (PropertyResourceBundle) PropertyResourceBundle.getBundle("properties/error"); }
Controller层
@GetMapping("/girls/{id}") public Girl girlById(@PathVariable("id")Integer id){ return girlService.girlById(id); }
Service层
public Girl girlById(Integer id) { Girl girl = girlRepository.findOne(id); Integer age = girl.getAge(); if(age < 10){ ExceptionUtil.throwError("100"); }else if(age >=10 && age < 16){ ExceptionUtil.throwError("101"); } return girl; }
演示结果:
相关文章推荐
- Springboot-系统异常统一处理(接口编程异常处理)
- Spring Boot中Web应用的统一异常处理
- Spring boot 自定义统一异常处理(以及规范响应格式)
- spring-boot统一处理返回给前台的数据格式(避免返回异常堆栈信息,干扰用户体验)
- spring-boot中统一异常处理
- Spring Cloud Spring Boot mybatis分布式微服务云架构(十一)Web应用的统一异常处理
- spring boot之统一错误异常处理
- Spring Boot中Web应用的统一异常处理
- SpringBoot学习之统一异常处理、404处理以及集成Swagger2
- spring boot - cloud (二) 规范响应格式以及统一异常处理
- SpringBoot初始教程之统一异常处理(三)
- SpringBoot进阶之使用异常替代返回错误码(拦截异常并统一处理)
- SpringBoot 和 SpringMVC的异常统一处理
- SpringBoot进阶之统一异常处理(含源码)
- spring boot的统一异常处理
- Spring Boot中Web应用的统一异常处理
- Spring Boot中Web应用的统一异常处理
- Spring Cloud Spring Boot mybatis分布式微服务云架构(十一)Web应用的统一异常处理
- spring-boot实战【07】【转】:Spring Boot中Web应用的统一异常处理
- spring boot / cloud (十二) 异常统一处理进阶