2015-04-30 26 views
6

Ho un progetto di Primavera (4.1.6.RELEASE) MVC con un controller che viene mappato a /home, ma il mio problema è che è anche invocato per i percorsi come /home.html o /home.doCome configurare Spring MVC DispatcherServlet per evitare url con estensioni?

La mia configurazione è:

web.xml:

<servlet> 
     <servlet-name>main</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>main</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

main-servlet.xml:

<mvc:annotation-driven /> 
    <mvc:resources mapping="/resources/**" location="/resources/" /> 
    <!-- ... --> 
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 

HomeController.java:

@Controller 
@RequestMapping({"/", "/home"}) 
public class HomeController { 
    @RequestMapping(method = RequestMethod.GET) 
    public String doGet(Model model) { 
     // ... 
     return "home"; 
    } 
} 

Come suggerito in questioni simili:

Ho provato ad aggiungere le seguenti configurazioni:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
     <property name="useDefaultSuffixPattern" value="false" /> 
    </bean> 

e

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"> 
     <property name="useSuffixPatternMatch" value="false" /> 
     <property name="useRegisteredSuffixPatternMatch" value="false" /> 
    </bean> 

ma senza successo.

Quando il debug del DispatcherServlet posso vedere che le istanze di RequestMappingHandlerMapping e DefaultAnnotationHandlerMapping non hanno impostare le proprietà di cui sopra commentato a false.

enter image description here

Sembra che una semplice configurazione dovrebbe farlo, ma mi manca qualcosa che io sono in grado di scoprire.

Come devo configurare correttamente il DispatcherServlet per evitare estensioni di file nei percorsi mappati?

Grazie in anticipo.

risposta

2

Come da Spring doc la configurazione deve essere inferiore a mvc:annotation-driven, ad es.

<mvc:annotation-driven> 
    <mvc:path-matching suffix-pattern="false" /> 
    </mvc:annotation-driven> 

come spiegato nella docs

se utilizzare modello di suffisso partita (".*") quando corrispondenti modelli a richieste. Se abilitato, un metodo associato a "/users" corrisponde anche a "/users.*". Il valore predefinito è true.

+0

Sì, hai ragione. Ha funzionato!Se potessi anche fornire il link ai documenti Sarebbe perfetto. –

+0

cosa certa, collegato sapere –