簡體   English   中英

如何處理 MethodArgumentNotValidException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM