From 660458a649e6158a9d772bba06326887995b60c4 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Mon, 21 Jan 2013 14:52:41 -0500 Subject: [PATCH] Fix init order issue in RequestMappingHandlerMapping Issue: SPR-10173 --- .../RequestMappingHandlerMapping.java | 2 +- .../RequestMappingHandlerMappingTests.java | 50 ++++++++++++++++++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.java index 5700b8def72..bb9ddd72b1f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.java @@ -157,10 +157,10 @@ public class RequestMappingHandlerMapping extends RequestMappingInfoHandlerMappi @Override public void afterPropertiesSet() { - super.afterPropertiesSet(); if (this.useRegisteredSuffixPatternMatch) { this.fileExtensions.addAll(contentNegotiationManager.getAllFileExtensions()); } + super.afterPropertiesSet(); } /** diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMappingTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMappingTests.java index 5c4d0776a49..63fce21fa7d 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMappingTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMappingTests.java @@ -15,20 +15,28 @@ */ package org.springframework.web.servlet.mvc.method.annotation; -import static org.junit.Assert.*; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import java.lang.reflect.Method; import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import org.junit.Before; import org.junit.Test; import org.springframework.http.MediaType; +import org.springframework.stereotype.Controller; import org.springframework.util.StringValueResolver; import org.springframework.web.accept.ContentNegotiationManager; import org.springframework.web.accept.PathExtensionContentNegotiationStrategy; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.context.support.StaticWebApplicationContext; -import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; /** * Tests for {@link RequestMappingHandlerMapping}. @@ -63,6 +71,35 @@ public class RequestMappingHandlerMappingTests { assertEquals(Arrays.asList("json"), this.handlerMapping.getFileExtensions()); } + @Test + public void useRegsiteredSuffixPatternMatchInitialization() { + + Map fileExtensions = Collections.singletonMap("json", MediaType.APPLICATION_JSON); + PathExtensionContentNegotiationStrategy strategy = new PathExtensionContentNegotiationStrategy(fileExtensions); + ContentNegotiationManager manager = new ContentNegotiationManager(strategy); + + final Set extensions = new HashSet(); + + RequestMappingHandlerMapping hm = new RequestMappingHandlerMapping() { + @Override + protected RequestMappingInfo getMappingForMethod(Method method, Class handlerType) { + extensions.addAll(getFileExtensions()); + return super.getMappingForMethod(method, handlerType); + } + }; + + StaticWebApplicationContext wac = new StaticWebApplicationContext(); + wac.registerSingleton("testController", TestController.class); + wac.refresh(); + + hm.setContentNegotiationManager(manager); + hm.setUseRegisteredSuffixPatternMatch(true); + hm.setApplicationContext(wac); + hm.afterPropertiesSet(); + + assertEquals(Collections.singleton("json"), extensions); + } + @Test public void useSuffixPatternMatch() { assertTrue(this.handlerMapping.useSuffixPatternMatch()); @@ -93,4 +130,13 @@ public class RequestMappingHandlerMappingTests { assertArrayEquals(new String[] { "/foo", "/foo/bar" }, result); } + + @Controller + static class TestController { + + @RequestMapping + public void handle() { + } + } + }