validator example custom beans bean java spring spring-mvc hibernate-validator spring-web

java - example - Controlador de descanso de primavera: cómo desactivar selectivamente la validación



spring custom validator (1)

En mi controlador tengo un método para crear una entidad

import javax.validation.Valid; ... @RestController public class Controller { @RequestMapping(method = RequestMethod.POST) public ResponseEntity<?> create(@Valid @RequestBody RequestDTO requestDTO) { ...

con

import org.hibernate.validator.constraints.NotEmpty; ... public class RequestDTO @NotEmpty // (1) private String field1; //other fields, getters and setters.

Quiero agregar un método de controlador

update(@Valid @RequestBody RequestDTO requestDTO)

pero en este método debería permitirse que el field1 esté vacío o nulo, es decir, la línea

@NotEmpty // (1)

de RequestDTO debe ser ignorado.

¿Cómo puedo hacer esto? ¿Tengo que escribir una clase que se ve exactamente igual a RequestDTO , pero no tiene la anotación? ¿O es de alguna manera posible a través de la herencia?


Respuesta corta: Usar grupos de validación :

@NotEmpty(groups = SomeCriteria.class) private String field1;

Y haga referencia a su grupo deseado en los parámetros del manejador de métodos:

public ResponseEntity<?> create(@Validated(SomeCriteria.class) @RequestBody RequestDTO requestDTO)

En el ejemplo anterior, se SomeCriteria las validaciones en el grupo SomeCriteria y se ignorarán otras. Por lo general, estos grupos de validación se definen como interfaces vacías:

public interface SomeCriteria {}

Puede leer más sobre estas restricciones de grupo en la documentación del Validador de Hibernate .