Я пытаюсь реализовать проверку входящего HTTP-запроса в приложении весенней загрузки. Я следовал этим инструкциям: https://www.yawintutor.com/how-to-validate-request-body-in-spring-boot/ но я не получаю ответа, как указано в статье.
Однако на моей консоли возникает исключение: DefaultHandlerExceptionResolver: ... DefaultMessageSourceResolvable: default message [must be a well-formed email address]]
Процесс остановлен на основании установленного ограничения (очевидно, форматирование электронной почты), но я не получаю сообщения HTTP-ответа, только Bad Request.
Это мой контроллер:
@RestController
@Validated
@RequestMapping(path = "/user", produces = MediaType.APPLICATION_JSON_VALUE)
public class UserController {
@PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<User> createUser(@Valid @RequestBody User user) {
User createdUser = userService.createUser(user);
return ResponseEntity.ok(user);
}
}
А это сущность:
@Entity
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
@Email
private String email;
}
Что мне не хватает?




Прежде всего, я хотел бы отметить, что для меня предоставленная ссылка (https://www.yawintutor.com/how-to-validate-request-body-in-spring-boot/) как-то не сработала ...
Теперь к вашему вопросу. Насколько я понимаю, для того, чтобы заархивировать это, вам сначала нужно создать валидатор, а затем вы могли бы продолжить что-то в этой строке (не ваш пример, но это должно помочь):
@RequestMapping(value = "/validation", method = RequestMethod.POST)
public ResponseEntity<?> acceptData(@Valid @RequestBody Data data, Errors errors,
@RequestHeader(HttpHeaders.ACCEPT_LANGUAGE) String language) {
stringValueValidator.validate(language, data, errors);
if (errors.hasErrors()) {
return new ResponseEntity<>(createErrorString(errors), HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<>(HttpStatus.OK);
}
Используйте @ControllerAdvice и создайте собственный объект ответа для представления недопустимых аргументов. В приведенном ниже примере будут возвращены все недопустимые аргументы со своими сообщениями.
@ControllerAdvice
public class ExceptionHandlerClass extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
List<String> validationList = ex.getBindingResult().getFieldErrors().stream().map(fieldError->fieldError.getDefaultMessage()).collect(Collectors.toList());
return new ResponseEntity<>(new ExceptionObject(false,validationList), status);
} }