異常處理
- 新建一个类GlobalDefaultExceptionHandler,
- 在class注解上@ControllerAdvice
- 在方法上注解上@ExceptionHandler(value = Exception.class)
- 示例代碼:
@ControllerAdvice
public class GlobalDefaultExceptionHandler {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@ExceptionHandler(Exception.class)
@ResponseBody
public ResponseEntity<Exception> handleException(HttpServletRequest request, Exception e) {
logger.error("Request FAILD","detail:"+String.format("URL = %s method = %s", request.getRequestURI(), request.getMethod()));
return new ResponseEntity<Exception>(e, HttpStatus.INTERNAL_SERVER_ERROR);
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public Response<String> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
logger.error("驗證錯誤", "detail:" + e.getMessage());
Response<String> response = Response.create(500, e.getBindingResult().getAllErrors().get(0).getDefaultMessage(), null);
return response;
}
}
- @ResponseEntity,可以定义返回的HttpHeaders和HttpStatus。
- @ExceptionHandler,定义拦截的异常
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExceptionHandler {
Class<? extends Throwable>[] value() default {};
}