Sto cercando di bagnarmi i piedi con Spring MVC 3.0, e mentre riesco a farlo funzionare, non riesco a gestire questo particolare scenario in modo efficiente.Spring MVC 3.0: come convalidare la variabile di percorso globale per tutte le associazioni di richieste in modo efficiente?
Ho un controller con che gestisce "/ {studyName}/modulo" prefisso, e sembra qualcosa di simile: -
@Controller
@RequestMapping(value = "/{studyName}/module")
public class ModuleController {
@RequestMapping(...)
public ModelAndView getA(@PathVariable String studyName, ...) {
if (!validStudy(studyName)) { return bad request; }
...
}
@RequestMapping(...)
public ModelAndView getB(@PathVariable String studyName, ...) {
if (!validStudy(studyName)) { return bad request; }
...
}
@RequestMapping(...)
public ModelAndView getC(@PathVariable String studyName, ...) {
if (!validStudy(studyName)) { return bad request; }
...
}
@RequestMapping(...)
public ModelAndView getD(@PathVariable String studyName, ...) {
if (!validStudy(studyName)) { return bad request; }
...
}
}
Il problema con questo codice è, ho la convalida studyName sparsi in tutto oltre i metodi e possibilmente anche in altri metodi di controllo. C'è un modo in cui posso eseguire la validazione su studyName path variable tutto in un punto senza usare qualcosa come AOP? Come gestisci la convalida in questo modo?
Grazie.
+1 a te. Ho guardato a @valid, ma nel mio caso, probabilmente dovrò creare la mia annotazione di convalida personalizzata perché devo controllare se lo studyName è registrato nel mio database, quindi non posso usare le convalide integrate dal validatore di hibernate. Per quanto riguarda il binding di un validatore, ho ancora bisogno di controllare "if (binder.hasErrors()) {do something}" in ogni metodo del controller, che è esattamente il problema che ho di fronte. Forse, questa è l'unica soluzione elegante disponibile al momento, ma mi fa davvero impazzire vedere lo stesso controllo ripetuto in ogni metodo. – limc
Se la convalida è per verificare che qualcosa esista nel DB, supponendo che sia probabile, farei semplicemente la query e registrerò un metodo @ExceptionHandler per gestire il caso improbabile che non sia così. – GaryF
Per quanto posso dire, non è ancora possibile utilizzare l'annotazione valida con PathVariable: https://jira.springsource.org/browse/SPR-6380 –