Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 如何在Spring MVC控制器的@RequestMapping路径中限制路由扩展?_Spring Mvc_Routes_Uri_Controllers - Fatal编程技术网

Spring mvc 如何在Spring MVC控制器的@RequestMapping路径中限制路由扩展?

Spring mvc 如何在Spring MVC控制器的@RequestMapping路径中限制路由扩展?,spring-mvc,routes,uri,controllers,Spring Mvc,Routes,Uri,Controllers,我有一个相当简单的任务要完成,但似乎找不到SpringMVC路由的相关信息。我有一个非常简单的控制器,它将路径路由到视图: @Controller @RequestMapping(value = "/help") public class HelpController { private static final String HELP = "help"; @RequestMapping(method = RequestMethod.GET) public Strin

我有一个相当简单的任务要完成,但似乎找不到SpringMVC路由的相关信息。我有一个非常简单的控制器,它将路径路由到视图:

@Controller
@RequestMapping(value = "/help")
public class HelpController {

    private static final String HELP = "help";

    @RequestMapping(method = RequestMethod.GET)
    public String help(Model model, Locale locale) {
        model.addAttribute("locale", locale);
        return HELP;
    }
}

我想扔一个404如果http://mysite.com/help.some.extension.is.entered,但Spring似乎将示例解析为/help。javadoc说@RequestMapping注释只是一个servlet URI映射,但我认为/help意味着它需要精确匹配。任何澄清都将不胜感激。

您可以在@RequestMapping注释中提及

它仅与Servlet URL模式相同

@Controller
public class HelpController {

    private static final String HELP = "help";

    @RequestMapping(value = "/help" method = RequestMethod.GET)
    public String help(Model model, Locale locale) {
        model.addAttribute("locale", locale);
        return HELP;
    }

    @RequestMapping(value = "help/*" method = RequestMethod.GET)
    public String helpWithExtraWords() {
        return "error";
    }
}

<> >我能想到的最好的方法是显式配置您的RealestMppAppHell映射,不考虑后缀路径,这种方式:

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

使用Spring3.0.X,您可以使用该属性

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

您需要删除


关于Spring 4,请参考,它很容易解决:

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


因此,您仍然可以在配置中使用
mvc:annotation-driven

我在springsource论坛上的一篇帖子中尝试了类似的方法。这似乎没有什么不同。这很奇怪@Roosh,这个配置对我有效,你能确认你已经完全删除了
mvc:annotation-driven
,并且只有这个handlerMapping吗。另外,您能告诉我您正在使用的Spring版本吗?Spring 3.0.5配置与我提供的不同(这是针对Spring 3.1+)我正在使用Spring 3.0.6。我没有从spring文件中删除我的语句。我会试试,让你知道它是否有效。是的,这应该是@Roosh的原因,在Spring3.0.6中,第一行应该是
,谢谢你的回复!但是,这并不能解决问题,因为路由前面有/*。我的目标是在输入/help.suffix时返回404。Spring接受句点字符作为/help的有效扩展名。当我删除它时,我开始得到servlet异常。javax.servlet.ServletException:处理程序[com.myapp.controller]没有适配器。ResourceController@244a0a42]:您的处理程序是否实现了一个受支持的接口,如控制器?@Roosh您还应该使用“”,这将起作用!!
<mvc:annotation-driven>
    <mvc:path-matching suffix-pattern="false" />
</mvc:annotation-driven>