From 675ec4c3e2664d387c13a9bc1af58db2048b16a1 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Thu, 18 Jul 2013 21:53:39 -0400 Subject: [PATCH] Fix issue in ContentNeogitatingViewResolver The following commit in 3.2.3 had a side effect on CNVR: https://github.com/SpringSource/spring-framework/commit/aaded7e30b06cc70a354856a2288acd04045b673 It appears that CNVR doesn't treat a request for "*/*" differently from a request that does not request content types. Both should be interpreted as "any content type is acceptable". This fix ensures that CNVR treats these two cases the same way. Issue: SPR-10683 --- .../web/servlet/view/ContentNegotiatingViewResolver.java | 6 +++++- .../servlet/view/ContentNegotiatingViewResolverTests.java | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java index 54295286ec..e31d240755 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java @@ -25,6 +25,7 @@ import java.util.Locale; import java.util.Map; import java.util.Properties; import java.util.Set; + import javax.activation.FileTypeMap; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; @@ -32,7 +33,6 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.OrderComparator; @@ -307,7 +307,11 @@ public class ContentNegotiatingViewResolver extends WebApplicationObjectSupport protected List getMediaTypes(HttpServletRequest request) { try { ServletWebRequest webRequest = new ServletWebRequest(request); + List acceptableMediaTypes = this.contentNegotiationManager.resolveMediaTypes(webRequest); + acceptableMediaTypes = acceptableMediaTypes.isEmpty() ? + Collections.singletonList(MediaType.ALL) : acceptableMediaTypes; + List producibleMediaTypes = getProducibleMediaTypes(request); Set compatibleMediaTypes = new LinkedHashSet(); for (MediaType acceptable : acceptableMediaTypes) { diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolverTests.java index fafea1c9d1..4911b5bb57 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolverTests.java @@ -46,6 +46,7 @@ import org.springframework.web.servlet.ViewResolver; import static org.junit.Assert.*; import static org.mockito.BDDMockito.*; +import static org.mockito.Mockito.*; /** * @author Arjen Poutsma