2010-10-09 16 views
36

Sto sviluppando un'applicazione Web che utilizza il framework mvc di primavera. Voglio entrambi i mapping di url basati su annotazione e beanName.Nessuna scheda per l'eccezione del gestore

Ho le seguenti configurazioni nel mio file di contesto

controllori
<mvc:annotation-driven /> 

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> 

La mia annotazione basato stanno lavorando bene, ma beanNamed basano mappatura URL stanno gettando l'eccezione "Nessun adattatore per il gestore".

Cosa sto facendo di sbagliato qui?

Grazie

risposta

77

Di default il MVC primavera definisce 3 diversi adattatori richiesta del gestore, sono

org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter 
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter 

Quindi non c'è bisogno di avere a definirli nel file di contesto, ma se si definisce almeno un adattatore per handler nei file di contesto, spring non creerà gli adattatori predefiniti.

Nella tua configuraion si utilizza <mvc:annotation-driven />, secondo this documentazione primavera questo farà sì che il contesto per definire sia DefaultAnnotationHandlerMapping e AnnotationMethodHandlerAdapter. Poiché stiamo creando AnnotationMethodHandlerAdapter nella nostra definizione di contesto, spring non creerà gli altri due handlerAdapter. Questo è il motivo per cui stai ricevendo la suddetta eccezione.

Il beanNameUrlMapping richiede l'handlerAdapter SimpleControllerHandlerAdapter.

Per risolvere questa eccezione, è sufficiente creare un nuovo bean di tipo "SimpleControllerHandlerAdapter" nel proprio contesto.

<bean 
    class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"> 
</bean> 
+1

questa è una semplice risposta diretta, ottima spiegazione :) –

+1

Questo non è stato facile da trovare. Ma alla fine l'ho fatto. Ottima spiegazione Stavo aggiungendo il supporto per le annotazioni e non volevo eseguire la migrazione di tutti i controller contemporaneamente. – panther

+0

Ha funzionato bene aggiungendo SimpleControllerHandlerAdapter. Grazie! – Ricardo

1

La stessa cosa è successa a me quando stavo cercando di integrare Spring MVC 2.5 con flusso di primavera web. Per il webflow ho fornito FlowHandlerdAdapter nel file di configurazione ma nessuno per MVC. Pertanto, come detto sopra, è necessario definire un BEAN di tipo simplecontrollerhandleradapter in questo caso che risolverà il problema.

Problemi correlati