2013-06-15 12 views
6

Guardando attraverso il codice sorgente per le nostre applicazioni, ho trovato un controller MVC Spring comune che visualizza chiavi e valori di configurazione copiati e incollati più volte. Le definizioni di classe sono esattamente le stesse, ad eccezione del valore RequestMapping, poiché ogni applicazione desidera che questa pagina sia disponibile con URL diversi.Override di RequestMapping sul controller SpringMVC

Desidero spostare questo controller in una libreria comune e fornire un valore RequestMapping predefinito.

@Controller 
@RequestMapping (value="/property") 
public class CommonPropertyController { 
    .... 
} 

In che modo ciascuna applicazione sovrascrive questo valore se desidera utilizzare il proprio modello di URL?

risposta

11

Guardando il codice sorgente ho avuto un'idea di come farlo senza dover tornare alla definizione del gestore manuale (pre-annotazione) (che è anche un modo per implementare ciò che ti serve).

Spring consente di utilizzare i configuratori segnaposto di proprietà nei valori @RequestMapping. Quindi è possibile utilizzare questo fatto e definire @RequestMapping come:

@Controller 
@RequestMapping("${routing.property.path}") 
public class CommonPropertyController { 
    .... 
} 

Poi si può semplicemente definire PropertySourcesPlaceholderConfigurer con le proprietà a destra nel vostro contesto di applicazione e vi sono buone per andare.


AGGIORNAMENTO È inoltre possibile specificare un valore predefinito utilizzando segnaposto proprietà se si vuole avere la mappatura ripiego nel caso in cui la proprietà non è speciefied:

@RequestMapping("${routing.property.path:/property}") 
+0

Wow questo è impressionante! – ltfishie

+0

Questo ha l'ulteriore vantaggio di disabilitare il controller se la proprietà non è presente. Esattamente quello che sto cercando. – ltfishie

+0

Non sono sicuro che sarete in grado di disabilitare il controller in questo modo. Sarà mappato al segnaposto stesso o potresti ricevere un errore sulla proprietà non risolta ... Btw. Ho anche notato che il comportamento dei segnaposto è menzionato in '@ RequestMapping' JavaDoc :) –

Problemi correlati