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中方法的参数上。
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- Activiti(一)SpringBoot2集成Activiti6
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜
- 感恩之旅第75天