Я пытаюсь создать класс @ControllerAdvice
, который в настоящее время обрабатывает исключение MethodArgumentNotValidException
. Я создал оболочку исключения для ответа, который имеет атрибут errorMessage
и statusCode
.
public class ExceptionBodyResponse {
private String exceptionMessage;
private int statusCode;
}
И @ControllerAdvice
:
@ControllerAdvice
public class DTOExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public ExceptionBodyResponse handleInvalidArgumentException(MethodArgumentNotValidException exception) {
return GenericBuilder.of(ExceptionBodyResponse::new)
.with(ExceptionBodyResponse::setExceptionMessage, exception.getMessage())
.with(ExceptionBodyResponse::setStatusCode, HttpStatus.BAD_REQUEST.value())
.build();
}
}
И, наконец, Класс DTO с проверкой @NotBlank:
public class RegisterRequestDto {
@NotBlank
private String email;
@NotBlank(message = "Password must not be null!")
private String password;
}
То, что я ожидаю в качестве ответа при отправке JSON с такой структурой:
{
"email":"stack@yahoo.com";
}
- это следующее сообщение об ошибке :
{
"exceptionMessage":"Password must not be null",
"statusCode":400
}
Вместо этого я получаю это:
"exceptionMessage": "Validation failed for argument [0] in public packagehere.UserDto packagehere.UserControllerImpl.save(packagehere.RegisterRequestDto): [Field error in object 'registerRequestDto' on field 'password': rejected value [null]; codes [NotBlank.registerRequestDto.password,NotBlank.password,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [registerRequestDto.password,password]; arguments []; default message [password]]; default message [Password must not be null!]] ",
"statusCode": 400