使用或不使用@RequestMapping的值的斜杠。需要官方文档或指向Spring源码?

时间:2012-10-05 08:48:40

标签: java spring spring-mvc

我参与了一个项目,在那里我找到了一个混合:

@RequestMapping(value = "events/...");
@RequestMapping(value = "/events/...");

(在方法级别注释之前使用和不使用斜杠)。

我执行搜索:

site:http://static.springsource.org/spring/docs/3.1.x  slash

并阅读以下链接:

但这些消息来源都没有回答为什么允许跳过斜线。官方Spring文档总是以斜线显示示例......

需要指向官方文档或Spring资源。

1 个答案:

答案 0 :(得分:39)

没关系:如果路径不以/开头,那么Spring(DefaultAnnotationHandlerMapping)将添加它。

请参阅类String[] determineUrlsForHandler(String beanName)第122行(Spring 3.1.2)的方法DefaultAnnotationHandlerMapping(适用于班级)

String[] methodLevelPatterns = determineUrlsForHandlerMethods(handlerType, true);
for (String typeLevelPattern : typeLevelPatterns) {
    if (!typeLevelPattern.startsWith("/")) {
            typeLevelPattern = "/" + typeLevelPattern;
    }

请参阅类String[] determineUrlsForHandler(Class<?> handlerType, final boolean hasTypeLevelMapping))第182行(Spring 3.1.2)的方法DefaultAnnotationHandlerMapping(即方法级别)

String[] mappedPatterns = mapping.value();
if (mappedPatterns.length > 0) {
for (String mappedPattern : mappedPatterns) {
    if (!hasTypeLevelMapping && !mappedPattern.startsWith("/")) {
        mappedPattern = "/" + mappedPattern;
    }