Spring handleBindException how to override

Пытаюсь переопределить метод:

@RestControllerAdvice
public class ControllersExceptionHandler extends ResponseEntityExceptionHandler {

    @Override
    protected ResponseEntity<Object> handleBindException(BindException ex, HttpHeaders headers, HttpStatus status, WebRequest request) {
        return handleExceptionInternal(ex, new ErrorDto(HttpStatus.BAD_REQUEST.value(),
                "Invalid credentials! Password should has min 8 symbols and all fields are required"),
                headers, status, request);
    }
}
==============================
@Data
@AllArgsConstructor
public class ErrorDto {
    private int status;
    private String message;
}

Пытаюсь переопределить так, чтобы он возвращал внятный ответ клиенту, но получается такое:

введите сюда описание изображения

И, как не пытаясь извратиться с ResponseEntity, всегда возвращает пустой json. Как это можно поправить?


Ответы (1 шт):

Автор решения: Nick

Вероятнее всего у вас бросается какое-то другое исключение, не BindException

В классе ResponseEntityExceptionHandler помимо handleBindException содержится ещё целая куча других handle***. Некоторые из них по-умолчанию возвращают 400 код и пустое тело.

Посмотрите отладчиком какое исключение приходит в ResponseEntityExceptionHandler.handleException и какой handle*** вызывается

Upd: при использовании @Valid и @Size(min=10) бросается исключение MethodArgumentNotValidException которое можно обработать переопределив метод handleMethodArgumentNotValid

→ Ссылка