SpringBoot进阶之使用异常替代返回错误码(拦截异常并统一处理)

直接上代码
1.Controller代码

@GetMapping(value = "https://www.it610.com/getage/{id}") public void getAge(@PathVariable("id") Integer id) throws Exception { girlService.getAge(id); }


2.Service代码
public void getAge(Integer id ) throws Exception { Girl girl =girlRepository.findOne(id); Integer age= girl.getAge(); if (age<18){ throw new TGException(ResultEnum.UNDER_AGE); } if (age>60){ throw new TGException(ResultEnum.OLDNESS); } }


3.TGException代码 【SpringBoot进阶之使用异常替代返回错误码(拦截异常并统一处理)】
public class TGException extends RuntimeException { privateInteger code; public TGException(ResultEnum resultEnum){ super(resultEnum.getMessage()); this.code=resultEnum.getCode(); }public Integer getCode() { return code; }public void setCode(Integer code) { this.code = code; } }

4.ResultEnum 代码(使用枚举 将返回的返回码和返回信息维护到同一个地方)
public enum ResultEnum { UNKONW_ERROR(-1,"未知错误"), SUCCESS(0,"成功"), UNDER_AGE(100,"未成年"), OLDNESS(101,"年龄超过60岁") ; private Integer code; private String message; ResultEnum(Integer code, String message) { this.code = code; this.message = message; }public Integer getCode() { return code; }public String getMessage() { return message; } }

5.ExceptionHandle代码(异常处理)
@ControllerAdvice public class ExceptionHandle {private final static Logger logger= LoggerFactory.getLogger(ExceptionHandle.class); @ResponseBody @ExceptionHandler(value = https://www.it610.com/article/Exception.class) public Msg handle(Exception e){ if(e instanceof TGException){ TGException tgException=(TGException) e; return ResultUtil.error(tgException.getCode(),tgException.getMessage()); }else { logger.error("【系统异常】{}",e); return ResultUtil.error(-1, "未知错误"); } } }


附:相关注解说明 @ControllerAdvicespring3.2新增了@ControllerAdvice 注解,
可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute,
并应用到所有@RequestMapping中(拦截异常并统一处理)
@ExceptionHandler(value = https://www.it610.com/article/Exception.class)异常处理器,此注解的作用是当出现其定义的异常时进行处理的方法

@ResponseBody该注解用于读取Request请求的body部分数据,
使用系统默认配置的HttpMessageConverter进行解析,
然后把相应的数据绑定到要返回的对象上,
再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上。











    推荐阅读