2011-02-04 12 views
8

Ho cercato un po 'di tempo in giro senza fortuna. I'n non utilizzando Spring MVC ma si desidera comunque utilizzare @javax.validation.Valid per abilitare la convalida degli argomenti del metodo. Per fare un esempioEsiste un modo standard per abilitare la convalida del bean JSR 303 usando gli argomenti del metodo annotato

public class EventServiceImpl implements IEventService { 
    @Override 
    public void invite(@Valid Event event, @Valid User user) { ... } 
} 

Utilizzando MVC, questo è abilitato per @Controller fagioli annotati con un semplice <mvc:annotation-driven/> (vedi 5.7.4.3 Configuring a JSR-303 Validator for use by Spring MVC).

L'utilizzo di AOP dovrebbe essere piuttosto banale. Tuttavia, sospetto che ci sia un modo standard per farlo. Di qui la domanda: c'è una cosa simile per le applicazioni non MVC e per i bean non controller per abilitare la convalida dell'input per i bean annotati?

risposta

6

La convalida del livello del metodo non fa parte della specifica di convalida del bean (JSR 303). La convalida del livello del metodo è un suggerimento nella specifica aggiunta in appendix C.

Hibernate Validator 4.2 (una versione beta è già disponibile) sta implementando questo suggerimento e consente di posizionare annotazioni JSR 303 su parametri del metodo e valori di ritorno. Ovviamente avrai ancora bisogno di un codice colla Spring, ma non dovrebbe essere troppo difficile.

Anche Bean Validation 1.1 aggiungerà la convalida del livello del metodo ufficialmente alle specifiche (non solo come appendice/raccomandazione). Vedi anche http://beanvalidation.org/

3

Utilizzando MVC, questo è abilitato per @Controller annotato fagioli

@Valid è solo un marcatore in grani controller che nasconde il codice che fa la convalida e mette tutte le violazioni dei vincoli in Errors in una bella modo. I progettisti della primavera avrebbero potuto inventare la propria annotazione per fare la stessa cosa.

L'uso reale di annotazione @Valid è nella classe (bean) che si sta convalidando con il validatore JSR 303 e il suo uso principale è quello di convalidare il grafico dell'oggetto. Il significato di un bean può avere altri riferimenti a bean con annotazione @Valid per avviare la convalida in modo ricorsivo.

Fuori dalla MVC, è possibile utilizzare validatore configurato per convalidare qualsiasi bean che utilizza JSR 303 annotazioni, ma, a differenza del ben popolata Errors nel controllore, si dovrà decidere che cosa si sta andando a che fare con violazioni di vincoli.

Quindi, per rispondere alla tua domanda, non esiste un modo standard. Per avere lo stesso aspetto di un controller, è possibile utilizzare l'annotazione @Valid (o crearne uno nuovo) per eseguire un avviso AOP per convalidare un bean e popolare un 'ViolationCollector' (qualcosa come Errori in MVC) che deve essere passato ad un metodo.

Problemi correlati