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 .