Пользовательский HTTP-статус валидатора Spring - PullRequest
0 голосов
/ 12 декабря 2018

Я бы хотел вернуть пользовательский статус HTTP 422 вместо значения по умолчанию 400 при проверке пружины.

Мой валидатор:

@Component
@RequiredArgsConstructor
public class EmailUpdateDtoValidator implements Validator {
private Errors errors;
private EmailUpdateDto emailUpdateDto;

@Override
public boolean supports(Class<?> clazz) {
    return EmailUpdateDto.class.equals(clazz);
}

@Override
public void validate(Object object, Errors errors) {
    this.errors = errors;
    this.emailUpdateDto = (EmailUpdateDto) object;

    validateEmail();
}

private void validateEmail() {
    if (!Email.isValid(emailUpdateDto.getEmail())) {
        errors.rejectValue("email", UserValidationErrorCodes.EMAIL_NOT_VALID.name());
    }
}
}

Как настроить проверку в контроллере:

@Slf4j
@RestController
@RequiredArgsConstructor
public class UserController {
private final EmailUpdateDtoValidator emailUpdateDtoValidator;

@InitBinder("emailUpdateDto")
protected void initEmailValidationBinder(final WebDataBinder binder) {
    binder.addValidators(emailUpdateDtoValidator);
}

@RequestMapping(value = "/users/{hashedId}/email", method = RequestMethod.PUT)
public void updateEmail(@RequestBody @Valid EmailUpdateDto emailUpdateDto) {
    ...
}
}

Используя эту настройку, я всегда получаю 400. Как я могу настроить статус HTTP при возврате?

Спасибо

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Процесс проверки выдаст org.springframework.web.bind.MethodArgumentNotValidException, поэтому вы можете добавить обработчик исключений в свой контроллер:

import org.springframework.web.bind.MethodArgumentNotValidException;

   @ExceptionHandler
    public ResponseEntity<String> handleException(MethodArgumentNotValidException ex) {
        return new ResponseEntity<String>(HttpStatus.UNPROCESSABLE_ENTITY);

    }
0 голосов
/ 12 декабря 2018

В качестве обходного пути вы можете определить ExceptionHandler и переопределить поведение по умолчанию.

 @ControllerAdvice
 public class RestExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler(MissingServletRequestParameterException.class)
    public ResponseEntity<Object> customHttpStatus() {
        return ResponseEntity.status(422).build();

    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...