Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

341
Views
"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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!