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 шт):
Вероятнее всего у вас бросается какое-то другое исключение, не BindException
В классе ResponseEntityExceptionHandler помимо handleBindException содержится ещё целая куча других handle***. Некоторые из них по-умолчанию возвращают 400 код и пустое тело.
Посмотрите отладчиком какое исключение приходит в ResponseEntityExceptionHandler.handleException и какой handle*** вызывается
Upd: при использовании @Valid и @Size(min=10) бросается исключение MethodArgumentNotValidException которое можно обработать переопределив метод handleMethodArgumentNotValid
