Quiero crear punto final de primavera para la validación de Java objeto. Traté de poner en práctica este ejemplo:
https://www.baeldung.com/validation-angularjs-spring-mvc
He intentado esto:
public class WpfPaymentsDTO {
@NotNull
@Size(min = 4, max = 15)
private String card_holder;
private String card_number;
....
}
Punto final:
@PostMapping(value = "/payment/{unique_transaction_id}", consumes = { MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<StringResponseDTO> handleWpfMessage(@PathVariable("unique_transaction_id") String unique_transaction_id,
@RequestBody WpfPaymentsDTO transaction, BindingResult result, HttpServletRequest request) throws Exception {
if (result.hasErrors()) {
List<String> errors = result.getAllErrors().stream()
.map(DefaultMessageSourceResolvable::getDefaultMessage)
.collect(Collectors.toList());
return new ResponseEntity<>(errors, HttpStatus.OK);
}
return ResponseEntity.ok(new StringResponseDTO("test"));
}
Cuando el uso somete forma angular me gustaría validar todos los campos. Pero actualmente me sale este error:Cannot infer type arguments for ResponseEntity<>
¿Cuál es el wya adecuado para implementar esta?
Se echa en falta la @Valid
anotación en su firma del método. Si nos fijamos en el ejemplo que está citando, se verá que se utiliza en el User
objeto.
Así, en su caso:
@Valid @RequestBody WpfPaymentsDTO transaction
También va a devolver dos tipos de clases diferentes en ResponseEntity<T>
1) ResponseEntity<StringResponseDTO>
en un escenario con éxito la validación
2) ResponseEntity<List<String>>
en un escenario de fallo de validación
Lo anterior es la razón de:
Pero actualmente me sale este error: No se puede inferir argumentos de tipo para ResponseEntity <>
Si nos fijamos en el ejemplo que está citando, el tipo de retorno método es ResponseEntity<Object>
.
Por lo que su método debe cambiar a:
@PostMapping(value = "/payment/{unique_transaction_id}",
consumes = { MediaType.APPLICATION_JSON_VALUE },
produces = { MediaType.APPLICATION_JSON_VALUE })
public ResponseEntity<Object> handleWpfMessage(
@PathVariable("unique_transaction_id") String unique_transaction_id,
@Valid @RequestBody WpfPaymentsDTO transaction,
BindingResult result,
HttpServletRequest request) throws Exception {
Actualizar:
¿Hay una manera de descubrir por qué variable se eleva el error de validación?
Sí, usted puede conseguir todo terreno errores como esta unión:
List<FieldError> errors = bindingResult.getFieldErrors();
for (FieldError error : errors ) {
System.out.println ("Validation error in field: " + error.getField()
+ "! Validation error message: " + error.getDefaultMessage()
+ "! Rejected value:" + error.getRejectedValue());
}