如何配置 Spring MVC DispatcherServlet 以避免 url 的扩展?

How to configure Spring MVC DispatcherServlet to avoid url's with extensions?

我有一个 Spring (4.1.6.RELEASE) MVC 项目,其控制器映射到 /home,但我的问题是它也被调用为路径 /home.html/home.do

我的配置是:

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>

主要-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";
    }
}

如类似问题中的建议:

我试过添加以下配置:

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

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

但没有成功。

当我调试 DispatcherServlet 时,我可以看到 RequestMappingHandlerMappingDefaultAnnotationHandlerMapping 的实例没有将上面注释的属性设置为 false.

似乎一个简单的配置就可以做到,但我遗漏了一些我无法找到的东西。

我应该如何正确配置 DispatcherServlet 以避免映射路径中的文件扩展名?

提前致谢。

根据 Spring doc 配置应在 mvc:annotation-driven 下,例如

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

docs

中所述

Whether to use suffix pattern match (".*") when matching patterns to requests. If enabled a method mapped to "/users" also matches to "/users.*". The default value is true.