Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

345
Visualizações
"Error de validación para objeto = 'usuario'. Recuento de errores: 1" en lugar de "el correo electrónico no debe ser nulo"

Tengo una API que valida y crea usuario. Cuando no escribo el correo electrónico en el cuerpo de la solicitud, recibo

 { "timestamp": "2020-11-26T13:55:40.116+00:00", "status": 400, "error": "Bad Request", "message": "Validation failed for object='user'. Error count: 1", "path": "/api/users" }

Quiero cambiar el mensaje a un error más comprensible como "el correo electrónico no debe ser nulo". Así es como se ve la propiedad de mi modelo:

 @NotNull private String email;

Y aquí está el método de mi controlador:

 @PostMapping("/users") public ResponseEntity<User> addUser(@RequestBody @Valid User user) { User savedUser = manager.save(user); URI uri = ServletUriComponentsBuilder.fromCurrentRequest() .path("/{id}") .buildAndExpand(savedUser.getId()) .toUri(); return ResponseEntity.ok(savedUser); }

Intenté establecer un mensaje personalizado en la anotación @NotNull , pero el mensaje no cambia. Además, cuando se lanza el error, la consola muestra este mensaje:

 2020-11-26 15:09:11.460 WARN 7137 --- [nio-8080-exec-2] .wsmsDefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public org.springframework.http.ResponseEntity<pl.vemu.socialApp.entities.User> pl.vemu.socialApp.controllers.UserController.addUser(pl.vemu.socialApp.entities.User) throws pl.vemu.socialApp.exceptions.user.UserWithEmailAlreadyExistException: [Field error in object 'user' on field 'email': rejected value [xsars.pl]; codes [Email.user.email,Email.email,Email.java.lang.String,Email]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.email,email]; arguments []; default message [email],[Ljavax.validation.constraints.Pattern$Flag;@2a50b33,.*]; default message [must be a well-formed email address]] ]

¿Cómo configurar el mensaje en respuesta json?
¿Cómo deshacerse de este mensaje en la consola? Otros errores no muestran mensajes en la consola.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

El problema es que Spring, de forma predeterminada, no envía errores mientras se vincula. Para habilitarlo, debe agregar server.error.include-binding-errors=always en su aplicación.propiedades.

over 4 years ago · Santiago Trujillo Relatório

0

En lugar de confiar en la propiedad "message" , puede usar la propiedad "defaultMessage" .

Puede establecer un mensaje de error personalizado en la anotación @NotNull .

 @NotNull(message = "Name cannot be null") private String name; @NotNull(message = "email cannot be null") @NotEmpty(message = "email cannot be empty") private String email;

Si falla la validación de un campo, spring establecerá estos mensajes personalizados en la propiedad "defaultMessage"

Como dijiste en los comentarios que no pudiste encontrar defaultMessage, otro enfoque (quizás el enfoque sucio) sería crear manualmente el cuerpo de la respuesta, puedes consultar el siguiente código de muestra para construirlo:

 @PostMapping("saveEmployee") public ResponseEntity<?> eat(@RequestBody @Valid Employee employee, Errors errors) { if (errors.hasFieldErrors()) { FieldError fieldError = errors.getFieldError(); return ResponseEntity.status(HttpStatus.BAD_REQUEST) .body(fieldError.getDefaultMessage()); } return ResponseEntity.ok(employee); }

FieldError#getDefaultMessage() expondrá el valor del atributo del message en @NotNull(message = "email can't be null")

over 4 years ago · Santiago Trujillo Relatório

0

ResponseEntity.status(HttpStatus.UNPROCESSABLE_ENTITY).body("email must be not null");

y reemplace HttpStatus.UNPROCESSABLE_ENTITY con un código de error adecuado.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda