Spring Boot 自定義異常及統一異常處理
阿新 • • 發佈:2019-02-01
自定義異常
自定義異常要繼承RuntimeException
public class ShowtimeException extends RuntimeException {
private Integer code;
public ShowtimeException(ResultEnum resultEnum){
super(resultEnum.getMsg());
this.code = resultEnum.getCode();
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
}
異常處理類
用@ControllerAdvice申明的類可以在Spring掃描時自動掃描,在異常的處理中@ControllerAdvice會優先選擇用@ExceptionHandler標註的方法來做異常的處理。
@ControllerAdvice
public class ExceptionHandle {
@ExceptionHandler(value = Exception.class)
@ResponseBody
public Result handle(Exception e){
// 判斷異常是自定義異常
if (e instanceof ShowtimeException){
ShowtimeException showtimeException = (ShowtimeException) e;
return ResultUtil.fail(showtimeException.getCode(), showtimeException.getMessage());
} else {
return ResultUtil.fail(-1, "e.getMessage()");
}
}
}
這樣當我們在程式碼中丟擲自定義異常時,就可以被捕獲,返回統一格式的結果
Controller中的程式碼為:
@GetMapping("/showtime/getAge/{id}")
public void getAge(@PathVariable("id") Integer id) throws Exception {
showtimeService.getAge(id);
}
Service中的程式碼為:
@Service
public class ShowtimeService {
@Autowired
private ShowtimeRepository showtimeRepository;
public void getAge(Integer id) throws Exception {
Showtime showtime = showtimeRepository.getOne(id);
Integer age = showtime.getAge();
if (age < 10){
throw new ShowtimeException(ResultEnum.ERROR_ONE);
} if (age > 12 && age < 18){
throw new ShowtimeException(ResultEnum.ERROR_TWO);
}
}
}
{
"msg": "年齡大於12小於18",
"code": 1,
"data": null
}