如何更改Spring MVC处理url'dot'字符的行为

Ale*_*nar 8 java spring-mvc

我正在尝试将一个Web项目从Jersey迁移到Spring MVC 3.0.这个过程非常简单,直到我开始使用点符号迁移应该处理URL的控制器:"/ myApp/resources/create/root.subFolder1 ".Spring MVC似乎无耻地从URL中删除了".subFolder1"部分,它发生在框架代码内部(参见AbstractUrlHandlerMapping类)

uriTemplateVariables.putAll(getPathMatcher().extractUriTemplateVariables(matchingPattern, urlPath));
Run Code Online (Sandbox Code Playgroud)

所以我的控制器方法是用root path参数调用的,而不是root.subFolder1

我真的想找到一种方法来自定义这种行为.有什么建议吗?

PS.该要求有点保持现有的URL结构,即切换到查询参数"/ myApp/resources/create/?path = root.subFolder1 "的变通方法,我无法考虑.

PS.我的Spring配置看起来像

<mvc:annotation-driven/>

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

<context:component-scan base-package="my.app.pkg"/>
Run Code Online (Sandbox Code Playgroud)

AHu*_*ist 8

试试这个:

<bean
        class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="useDefaultSuffixPattern" value="false" />
    </bean>
Run Code Online (Sandbox Code Playgroud)

这应该使Spring不会尝试解析扩展.

另请参见:Spring MVC @PathVariable被截断

并且:Spring文档

潜在的配置文件:

web.xml(我设置servlet的东西)

<servlet>
    <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring/*.xml,classpath*:applicationContext.xml,classpath*:restApplicationContext.xml
        </param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>
Run Code Online (Sandbox Code Playgroud)

然后在WEB/INF/spring/mvc-config.xml中我有这样的事情:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

    <bean
        class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="useDefaultSuffixPattern" value="false" />
    </bean>
</beans>
Run Code Online (Sandbox Code Playgroud)


Jos*_*osh 8

在某些情况下可能更容易的另一种可能性是/在URL的末尾添加一个尾随.

所以你的网址就是 /myApp/resources/create/root.subFolder1/

这适用于我的应用程序使用Spring MVC 3.1.