Polish ContentNegotiationStrategy support
Issue: SPR-8410, SPR-8417, SPR-8418,SPR-8416, SPR-8419,SPR-7722
This commit is contained in:
@@ -102,7 +102,7 @@ public class ContentNegotiatingViewResolver extends WebApplicationObjectSupport
|
||||
private boolean favorPathExtension = true;
|
||||
private boolean favorParameter = false;
|
||||
private boolean ignoreAcceptHeader = false;
|
||||
private Map<String, String> mediaTypes = new HashMap<String, String>();
|
||||
private Map<String, MediaType> mediaTypes = new HashMap<String, MediaType>();
|
||||
private Boolean useJaf;
|
||||
private String parameterName;
|
||||
private MediaType defaultContentType;
|
||||
@@ -200,7 +200,13 @@ public class ContentNegotiatingViewResolver extends WebApplicationObjectSupport
|
||||
* @deprecated use {@link #setContentNegotiationManager(ContentNegotiationManager)}
|
||||
*/
|
||||
public void setMediaTypes(Map<String, String> mediaTypes) {
|
||||
this.mediaTypes = mediaTypes;
|
||||
if (mediaTypes != null) {
|
||||
for (Map.Entry<String, String> entry : mediaTypes.entrySet()) {
|
||||
String extension = entry.getKey().toLowerCase(Locale.ENGLISH);
|
||||
MediaType mediaType = MediaType.parseMediaType(entry.getValue());
|
||||
this.mediaTypes.put(extension, mediaType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -389,7 +395,7 @@ public class ContentNegotiatingViewResolver extends WebApplicationObjectSupport
|
||||
candidateViews.add(view);
|
||||
}
|
||||
for (MediaType requestedMediaType : requestedMediaTypes) {
|
||||
List<String> extensions = this.contentNegotiationManager.resolveExtensions(requestedMediaType);
|
||||
List<String> extensions = this.contentNegotiationManager.resolveFileExtensions(requestedMediaType);
|
||||
for (String extension : extensions) {
|
||||
String viewNameWithExtension = viewName + "." + extension;
|
||||
view = viewResolver.resolveViewName(viewNameWithExtension, locale);
|
||||
|
||||
@@ -43,7 +43,7 @@ import org.springframework.mock.web.MockServletContext;
|
||||
import org.springframework.web.accept.ContentNegotiationManager;
|
||||
import org.springframework.web.accept.FixedContentNegotiationStrategy;
|
||||
import org.springframework.web.accept.HeaderContentNegotiationStrategy;
|
||||
import org.springframework.web.accept.MappingMediaTypeExtensionsResolver;
|
||||
import org.springframework.web.accept.MappingMediaTypeFileExtensionResolver;
|
||||
import org.springframework.web.accept.ParameterContentNegotiationStrategy;
|
||||
import org.springframework.web.accept.PathExtensionContentNegotiationStrategy;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
@@ -117,10 +117,10 @@ public class ContentNegotiatingViewResolverTests {
|
||||
public void resolveViewNameWithAcceptHeader() throws Exception {
|
||||
request.addHeader("Accept", "application/vnd.ms-excel");
|
||||
|
||||
Map<String, String> mapping = Collections.singletonMap("xls", "application/vnd.ms-excel");
|
||||
MappingMediaTypeExtensionsResolver extensionsResolver = new MappingMediaTypeExtensionsResolver(mapping);
|
||||
Map<String, MediaType> mapping = Collections.singletonMap("xls", MediaType.valueOf("application/vnd.ms-excel"));
|
||||
MappingMediaTypeFileExtensionResolver extensionsResolver = new MappingMediaTypeFileExtensionResolver(mapping);
|
||||
ContentNegotiationManager manager = new ContentNegotiationManager(new HeaderContentNegotiationStrategy());
|
||||
manager.addExtensionsResolver(extensionsResolver);
|
||||
manager.addFileExtensionResolvers(extensionsResolver);
|
||||
viewResolver.setContentNegotiationManager(manager);
|
||||
|
||||
ViewResolver viewResolverMock = createMock(ViewResolver.class);
|
||||
@@ -155,7 +155,7 @@ public class ContentNegotiatingViewResolverTests {
|
||||
public void resolveViewNameWithRequestParameter() throws Exception {
|
||||
request.addParameter("format", "xls");
|
||||
|
||||
Map<String, String> mapping = Collections.singletonMap("xls", "application/vnd.ms-excel");
|
||||
Map<String, MediaType> mapping = Collections.singletonMap("xls", MediaType.valueOf("application/vnd.ms-excel"));
|
||||
ParameterContentNegotiationStrategy paramStrategy = new ParameterContentNegotiationStrategy(mapping);
|
||||
viewResolver.setContentNegotiationManager(new ContentNegotiationManager(paramStrategy));
|
||||
|
||||
@@ -343,8 +343,7 @@ public class ContentNegotiatingViewResolverTests {
|
||||
public void resolveViewNameFilenameDefaultView() throws Exception {
|
||||
request.setRequestURI("/test.json");
|
||||
|
||||
|
||||
Map<String, String> mapping = Collections.singletonMap("json", "application/json");
|
||||
Map<String, MediaType> mapping = Collections.singletonMap("json", MediaType.APPLICATION_JSON);
|
||||
PathExtensionContentNegotiationStrategy pathStrategy = new PathExtensionContentNegotiationStrategy(mapping);
|
||||
viewResolver.setContentNegotiationManager(new ContentNegotiationManager(pathStrategy));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user