2016-02-29 11 views
5

In meinem Controller habe ich eine Methode für ein Unternehmen zu schaffenFederauflage Controller: wie man selektiv abschalten Validierung

import javax.validation.Valid; 
... 
@RestController 
public class Controller { 

    @RequestMapping(method = RequestMethod.POST) 
    public ResponseEntity<?> create(@Valid @RequestBody RequestDTO requestDTO) { 
    ... 

mit

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

Ich möchte eine Controller-Methode

update(@Valid @RequestBody RequestDTO requestDTO) 
hinzufügen

aber in dieser Methode sollte es für field1 erlaubt leer oder Null sein, dh die Linie

@NotEmpty // (1) 

der RequestDTO sollte ignoriert werden.

Wie kann ich das tun? Muss ich eine Klasse schreiben, die genau wie RequestDTO aussieht, aber keine Annotation hat? Oder ist es irgendwie über Vererbung möglich?

Antwort

8

Kurze Antwort: Verwenden Sie Validation Gruppen:

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

Und Ihre Zielgruppe in Methodenhandler Parameter Referenz:

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

In dem obigen Beispiel Validierungen in der SomeCriteria Gruppe wird angewendet und andere werden ignoriert. Üblicherweise werden diese Validierungsgruppen als leere Schnittstellen definiert:

public interface SomeCriteria {} 

Sie können mehr über diese Gruppe Einschränkungen in Hibernate Validator documentation lesen.