32

I involved in project where I found a mix of:

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

(with and without slash before method level annotation).

I perform search:

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

and read these links:

But none of these sources answer why skipping slash allowed. Official Spring docs always shown examples with slashes...

Need point to official docs or to Spring sources.

Community
  • 1
  • 1
gavenkoa
  • 41,371
  • 15
  • 229
  • 277

1 Answers1

60

It does not matter: If the path does not start with an / then Spring (DefaultAnnotationHandlerMapping) will add it.

See method String[] determineUrlsForHandler(String beanName) of Class DefaultAnnotationHandlerMapping line 122 (Spring 3.1.2) (that is for the class level)

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

See method String[] determineUrlsForHandler(Class<?> handlerType, final boolean hasTypeLevelMapping)) of Class DefaultAnnotationHandlerMapping line 182 (Spring 3.1.2) (that is for the method level)

String[] mappedPatterns = mapping.value();
if (mappedPatterns.length > 0) {
for (String mappedPattern : mappedPatterns) {
    if (!hasTypeLevelMapping && !mappedPattern.startsWith("/")) {
        mappedPattern = "/" + mappedPattern;
    }   
Ralph
  • 115,440
  • 53
  • 279
  • 370