Añadir vinculante para la validación

Peter Penzov:

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?

hovanessyan:

Se echa en falta la @Validanotación en su firma del método. Si nos fijamos en el ejemplo que está citando, se verá que se utiliza en el Userobjeto.

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());
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=188090&siteId=1
Recomendado
Clasificación