Set all strategies in CNM factory bean

ContentNegotiationManagerFactoryBean now provides an option to
explicitly set the strategies to use vs customizing a fixed
list of default strategies.

Issue: SPR-11114
This commit is contained in:
Rossen Stoyanchev
2017-07-11 21:00:57 +02:00
parent befacf4a35
commit 134ceac58e
4 changed files with 119 additions and 59 deletions

View File

@@ -89,6 +89,25 @@ public class ContentNegotiationManagerFactoryBeanTests {
Collections.singletonList(MediaType.IMAGE_GIF), manager.resolveMediaTypes(this.webRequest));
}
@Test
public void explicitStrategies() throws Exception {
Map<String, MediaType> mediaTypes = Collections.singletonMap("bar", new MediaType("application", "bar"));
ParameterContentNegotiationStrategy strategy1 = new ParameterContentNegotiationStrategy(mediaTypes);
HeaderContentNegotiationStrategy strategy2 = new HeaderContentNegotiationStrategy();
List<ContentNegotiationStrategy> strategies = Arrays.asList(strategy1, strategy2);
this.factoryBean.setStrategies(strategies);
this.factoryBean.afterPropertiesSet();
ContentNegotiationManager manager = this.factoryBean.getObject();
assertEquals(strategies, manager.getStrategies());
this.servletRequest.setRequestURI("/flower");
this.servletRequest.addParameter("format", "bar");
assertEquals(Collections.singletonList(new MediaType("application", "bar")),
manager.resolveMediaTypes(this.webRequest));
}
@Test
public void favorPath() throws Exception {
this.factoryBean.setFavorPathExtension(true);