diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java b/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java index 76b65c3904c..7575d118631 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockServletContext.java @@ -242,8 +242,16 @@ public class MockServletContext implements ServletContext { return this.effectiveMinorVersion; } + /** + * This method uses the Java Activation framework, which returns + * "application/octet-stream" when the mime type is unknown (i.e. it never returns + * {@code null}). In order to maintain the {@link ServletContext#getMimeType(String) + * contract, as of version 3.2.2, this method returns null if the mimeType is + * "application/octet-stream". + */ public String getMimeType(String filePath) { - return MimeTypeResolver.getMimeType(filePath); + String mimeType = MimeTypeResolver.getMimeType(filePath); + return ("application/octet-stream".equals(mimeType)) ? null : mimeType; } public Set getResourcePaths(String path) { diff --git a/spring-web/src/test/java/org/springframework/mock/web/test/MockServletContext.java b/spring-web/src/test/java/org/springframework/mock/web/test/MockServletContext.java index d18678dc4a4..dd070c7785c 100644 --- a/spring-web/src/test/java/org/springframework/mock/web/test/MockServletContext.java +++ b/spring-web/src/test/java/org/springframework/mock/web/test/MockServletContext.java @@ -45,7 +45,6 @@ import javax.servlet.descriptor.JspConfigDescriptor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; @@ -258,9 +257,17 @@ public class MockServletContext implements ServletContext { return this.effectiveMinorVersion; } + /** + * This method uses the Java Activation framework, which returns + * "application/octet-stream" when the mime type is unknown (i.e. it never returns + * {@code null}). In order to maintain the {@link ServletContext#getMimeType(String) + * contract, as of version 3.2.2, this method returns null if the mimeType is + * "application/octet-stream". + */ @Override public String getMimeType(String filePath) { - return MimeTypeResolver.getMimeType(filePath); + String mimeType = MimeTypeResolver.getMimeType(filePath); + return ("application/octet-stream".equals(mimeType)) ? null : mimeType; } @Override diff --git a/spring-web/src/test/java/org/springframework/web/accept/PathExtensionContentNegotiationStrategyTests.java b/spring-web/src/test/java/org/springframework/web/accept/PathExtensionContentNegotiationStrategyTests.java index 81029401f08..b814c5926e3 100644 --- a/spring-web/src/test/java/org/springframework/web/accept/PathExtensionContentNegotiationStrategyTests.java +++ b/spring-web/src/test/java/org/springframework/web/accept/PathExtensionContentNegotiationStrategyTests.java @@ -74,10 +74,12 @@ public class PathExtensionContentNegotiationStrategyTests { assertEquals(Arrays.asList(new MediaType("application", "vnd.ms-excel")), mediaTypes); } + // SPR-10334 + @Test public void getMediaTypeFromFilenameNoJaf() { - this.servletRequest.setRequestURI("test.xls"); + this.servletRequest.setRequestURI("test.json"); ServletContext servletContext = this.servletRequest.getServletContext(); PathExtensionContentNegotiationStrategy strategy = @@ -86,7 +88,7 @@ public class PathExtensionContentNegotiationStrategyTests { List mediaTypes = strategy.resolveMediaTypes(this.webRequest); - assertEquals(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM), mediaTypes); + assertEquals(Collections.emptyList(), mediaTypes); } // SPR-8678