33

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
  • 45,285
  • 19
  • 251
  • 303

1 Answers1

63

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
  • 118,862
  • 56
  • 287
  • 383