下面列出了org.springframework.web.servlet.view.ContentNegotiatingViewResolver#setContentNegotiationManager ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Bean
public ContentNegotiatingViewResolver contentNegotiatingViewResolver() {
List<View> defaultViews = new ArrayList<>(2);
defaultViews.add(jsonCatnapSpringView());
defaultViews.add(jsonpCatnapSpringView());
List<CatnapWrappingView> catnapViews = new ArrayList<>(2);
catnapViews.add(jsonCatnapSpringView());
catnapViews.add(jsonpCatnapSpringView());
CatnapViewResolver catnapViewResolver = new CatnapViewResolver();
catnapViewResolver.setViews(catnapViews);
List<ViewResolver> viewResolvers = new ArrayList<>(1);
viewResolvers.add(catnapViewResolver);
ContentNegotiatingViewResolver cnvr = new ContentNegotiatingViewResolver();
cnvr.setContentNegotiationManager(mvcContentNegotiationManager());
cnvr.setOrder(1);
cnvr.setDefaultViews(defaultViews);
cnvr.setViewResolvers(viewResolvers);
return cnvr;
}
@Bean
public ContentNegotiatingViewResolver contentNegotiatingViewResolver() {
List<View> defaultViews = new ArrayList<>(2);
defaultViews.add(jsonCatnapSpringView());
defaultViews.add(jsonpCatnapSpringView());
List<CatnapWrappingView> catnapViews = new ArrayList<>(2);
catnapViews.add(jsonCatnapSpringView());
catnapViews.add(jsonpCatnapSpringView());
CatnapViewResolver catnapViewResolver = new CatnapViewResolver();
catnapViewResolver.setViews(catnapViews);
List<ViewResolver> viewResolvers = new ArrayList<>(1);
viewResolvers.add(catnapViewResolver);
ContentNegotiatingViewResolver cnvr = new ContentNegotiatingViewResolver();
cnvr.setContentNegotiationManager(mvcContentNegotiationManager());
cnvr.setOrder(1);
cnvr.setDefaultViews(defaultViews);
cnvr.setViewResolvers(viewResolvers);
return cnvr;
}
@Bean
public ViewResolver cnViewResolver(ContentNegotiationManager cnm) {
/*
* 内容协商视图解析器
* 1.确定请求的媒体类型;
* 首先查看URL的文件扩展名,如果扩展名是“.json”,那么所需的内容类型必须是application/json
* 没找到扩展名,则从请求中的Accept头部信息中找
* 都没有,ContentNegotiatingViewResolver将会使用“/”作为默认的内容类型,
* 这就意味着客户端必须要接收服务器发送的任何形式的表述
* 2.找到适合请求媒体类型的最佳视图
*/
ContentNegotiatingViewResolver cnvr = new ContentNegotiatingViewResolver();
cnvr.setContentNegotiationManager(cnm);
return cnvr;
}
@Test
public void testContentNegotiation() throws Exception {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(Person.class);
List<View> viewList = new ArrayList<View>();
viewList.add(new MappingJackson2JsonView());
viewList.add(new MarshallingView(marshaller));
ContentNegotiationManager manager = new ContentNegotiationManager(
new HeaderContentNegotiationStrategy(), new FixedContentNegotiationStrategy(MediaType.TEXT_HTML));
ContentNegotiatingViewResolver cnViewResolver = new ContentNegotiatingViewResolver();
cnViewResolver.setDefaultViews(viewList);
cnViewResolver.setContentNegotiationManager(manager);
cnViewResolver.afterPropertiesSet();
MockMvc mockMvc =
standaloneSetup(new PersonController())
.setViewResolvers(cnViewResolver, new InternalResourceViewResolver())
.build();
mockMvc.perform(get("/person/Corea"))
.andExpect(status().isOk())
.andExpect(model().size(1))
.andExpect(model().attributeExists("person"))
.andExpect(forwardedUrl("person/show"));
mockMvc.perform(get("/person/Corea").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.person.name").value("Corea"));
mockMvc.perform(get("/person/Corea").accept(MediaType.APPLICATION_XML))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_XML))
.andExpect(xpath("/person/name/text()").string(equalTo("Corea")));
}
@Bean
public ContentNegotiatingViewResolver viewResolver(ContentNegotiationManager cnManager) {
ContentNegotiatingViewResolver cnvResolver = new ContentNegotiatingViewResolver();
cnvResolver.setContentNegotiationManager(cnManager);
List<ViewResolver> resolvers = new ArrayList<>();
InternalResourceViewResolver bean = new InternalResourceViewResolver("/WEB-INF/views/",".jsp");
ArticleRssFeedViewResolver articleRssFeedViewResolver = new ArticleRssFeedViewResolver();
resolvers.add(bean);
resolvers.add(articleRssFeedViewResolver);
cnvResolver.setViewResolvers(resolvers);
return cnvResolver;
}
@Test
public void testContentNegotiation() throws Exception {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(Person.class);
List<View> viewList = new ArrayList<>();
viewList.add(new MappingJackson2JsonView());
viewList.add(new MarshallingView(marshaller));
ContentNegotiationManager manager = new ContentNegotiationManager(
new HeaderContentNegotiationStrategy(), new FixedContentNegotiationStrategy(MediaType.TEXT_HTML));
ContentNegotiatingViewResolver cnViewResolver = new ContentNegotiatingViewResolver();
cnViewResolver.setDefaultViews(viewList);
cnViewResolver.setContentNegotiationManager(manager);
cnViewResolver.afterPropertiesSet();
MockMvc mockMvc =
standaloneSetup(new PersonController())
.setViewResolvers(cnViewResolver, new InternalResourceViewResolver())
.build();
mockMvc.perform(get("/person/Corea"))
.andExpect(status().isOk())
.andExpect(model().size(1))
.andExpect(model().attributeExists("person"))
.andExpect(forwardedUrl("person/show"));
mockMvc.perform(get("/person/Corea").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.person.name").value("Corea"));
mockMvc.perform(get("/person/Corea").accept(MediaType.APPLICATION_XML))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_XML))
.andExpect(xpath("/person/name/text()").string(equalTo("Corea")));
}
@Test
public void testContentNegotiation() throws Exception {
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(Person.class);
List<View> viewList = new ArrayList<>();
viewList.add(new MappingJackson2JsonView());
viewList.add(new MarshallingView(marshaller));
ContentNegotiationManager manager = new ContentNegotiationManager(
new HeaderContentNegotiationStrategy(), new FixedContentNegotiationStrategy(MediaType.TEXT_HTML));
ContentNegotiatingViewResolver cnViewResolver = new ContentNegotiatingViewResolver();
cnViewResolver.setDefaultViews(viewList);
cnViewResolver.setContentNegotiationManager(manager);
cnViewResolver.afterPropertiesSet();
MockMvc mockMvc =
standaloneSetup(new PersonController())
.setViewResolvers(cnViewResolver, new InternalResourceViewResolver())
.build();
mockMvc.perform(get("/person/Corea"))
.andExpect(status().isOk())
.andExpect(model().size(1))
.andExpect(model().attributeExists("person"))
.andExpect(forwardedUrl("person/show"));
mockMvc.perform(get("/person/Corea").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.person.name").value("Corea"));
mockMvc.perform(get("/person/Corea").accept(MediaType.APPLICATION_XML))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_XML))
.andExpect(xpath("/person/name/text()").string(equalTo("Corea")));
}