[英]How to handle @Valid MethodArgumentNotValidException by @RestControllerAdvice
[英]How to handle MethodArgumentNotValidException
我想處理驗證器拋出的異常。
我已經使用 ControllerAdvice 注釋制作了異常處理程序。 它處理其他異常,但不處理 MethodArgumentNotValidException。
異常處理程序
@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value
= {ResourceNotFoundException.class, EntityNotFoundException.class})
protected ResponseEntity<Object> handleNotFound(
RuntimeException ex, WebRequest request) {
APIException apiException = new APIException(HttpStatus.NOT_FOUND,
ex.getMessage(), request);
return handleExceptionInternal(ex, apiException,
new HttpHeaders(), apiException.getStatus(), request);
}
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid
(MethodArgumentNotValidException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
APIException apiException = new APIException(HttpStatus.BAD_REQUEST,
ex.getMessage(), request);
return handleExceptionInternal(ex, apiException,
new HttpHeaders(), apiException.getStatus(), request);
}
}
驗證類(沒有 getter/setter 等)
public class ClassQuery {
@Min(1)
private Integer minYear;
@Min(1)
private Integer year;
@Min(1)
private Integer maxYear;
private String name;
private String profile;
}
休息 api 控制器
@GetMapping
public Page<Class> getClasses(@Valid ClassQuery classQuery, Pageable pageable) {
return classService.getClasses(classQuery, pageable);
}
Api 異常(沒有 getter/setter 等)
public class APIException {
private Date timestamp;
private HttpStatus status;
private String message;
private String path;
public APIExceptionMessage(HttpStatus status, String message, WebRequest request) {
this();
this.status = status;
this.message = message;
this.path = getRequestURI(request);
}
}
目前我從驗證器收到一個帶有 BAD_REQUEST http 狀態的空響應,而其他異常得到正確處理。 我也嘗試不擴展 ResponseEntityExceptionHandler 並使用 @ExceptionHandler 處理它,但它忽略了我的響應正文,作為響應,它給出了默認錯誤消息。 我沒有收到任何錯誤。
這可能有點太晚了。
我遇到了同樣的問題,其中MethodArgumentNotValidException
沒有被注釋為ControllerAdvice
的類處理。 就我而言,我想序列化一個自定義 ErrorDTO 對象並將其作為 JSON 發送到 HTTP 客戶端。
解決方案: MethodArgumentNotValidException
應該從org.springframework.web.bind.MethodArgumentNotValidException
導入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.