private ContentNegotiatingViewResolver initContentNegotiatingViewResolver(View[] defaultViews) { // ContentNegotiatingResolver in the registry: elevate its precedence! this.order = (this.order != null ? this.order : Ordered.HIGHEST_PRECEDENCE); if (this.contentNegotiatingResolver != null) { if (!ObjectUtils.isEmpty(defaultViews) && !CollectionUtils.isEmpty(this.contentNegotiatingResolver.getDefaultViews())) { List<View> views = new ArrayList<>(this.contentNegotiatingResolver.getDefaultViews()); views.addAll(Arrays.asList(defaultViews)); this.contentNegotiatingResolver.setDefaultViews(views); } } else { this.contentNegotiatingResolver = new ContentNegotiatingViewResolver(); this.contentNegotiatingResolver.setDefaultViews(Arrays.asList(defaultViews)); this.contentNegotiatingResolver.setViewResolvers(this.viewResolvers); if (this.contentNegotiationManager != null) { this.contentNegotiatingResolver.setContentNegotiationManager(this.contentNegotiationManager); } } return this.contentNegotiatingResolver; }
private ContentNegotiatingViewResolver initContentNegotiatingViewResolver(View[] defaultViews) { // ContentNegotiatingResolver in the registry: elevate its precedence! this.order = (this.order != null ? this.order : Ordered.HIGHEST_PRECEDENCE); if (this.contentNegotiatingResolver != null) { if (!ObjectUtils.isEmpty(defaultViews) && !CollectionUtils.isEmpty(this.contentNegotiatingResolver.getDefaultViews())) { List<View> views = new ArrayList<>(this.contentNegotiatingResolver.getDefaultViews()); views.addAll(Arrays.asList(defaultViews)); this.contentNegotiatingResolver.setDefaultViews(views); } } else { this.contentNegotiatingResolver = new ContentNegotiatingViewResolver(); this.contentNegotiatingResolver.setDefaultViews(Arrays.asList(defaultViews)); this.contentNegotiatingResolver.setViewResolvers(this.viewResolvers); if (this.contentNegotiationManager != null) { this.contentNegotiatingResolver.setContentNegotiationManager(this.contentNegotiationManager); } } return this.contentNegotiatingResolver; }
@Bean public org.springframework.web.servlet.view.ContentNegotiatingViewResolver viewResolver(ApplicationContext context, ContentNegotiationManager contentNegotiationManager) { ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver(); ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setCharacterEncoding(StandardCharsets.UTF_8.toString()); viewResolver.setTemplateEngine(webTemplateEngine(context)); ForwardAwareInternalResourceViewResolver forwardAwareInternalResourceViewResolver = new ForwardAwareInternalResourceViewResolver(); BeanNameViewResolver beanNameViewResolver = new BeanNameViewResolver(); resolver.setViewResolvers(Arrays.asList(viewResolver, forwardAwareInternalResourceViewResolver, beanNameViewResolver)); MappingJackson2JsonView jackson2JsonView = new MappingJackson2JsonView(); jackson2JsonView.setExtractValueFromSingleKeyModel(true); resolver.setDefaultViews(Arrays.asList(jackson2JsonView)); resolver.setContentNegotiationManager(contentNegotiationManager); return resolver; }
@Test public void resolveViewNameRedirectView() throws Exception { request.addHeader("Accept", "application/json"); request.setRequestURI("/test"); StaticWebApplicationContext webAppContext = new StaticWebApplicationContext(); webAppContext.setServletContext(new MockServletContext()); webAppContext.refresh(); UrlBasedViewResolver urlViewResolver = new InternalResourceViewResolver(); urlViewResolver.setApplicationContext(webAppContext); ViewResolver xmlViewResolver = mock(ViewResolver.class); viewResolver.setViewResolvers(Arrays.<ViewResolver>asList(xmlViewResolver, urlViewResolver)); View xmlView = mock(View.class, "application_xml"); View jsonView = mock(View.class, "application_json"); viewResolver.setDefaultViews(Arrays.asList(jsonView)); viewResolver.afterPropertiesSet(); String viewName = "redirect:anotherTest"; Locale locale = Locale.ENGLISH; given(xmlViewResolver.resolveViewName(viewName, locale)).willReturn(xmlView); given(jsonView.getContentType()).willReturn("application/json"); View actualView = viewResolver.resolveViewName(viewName, locale); assertEquals("Invalid view", RedirectView.class, actualView.getClass()); }
@Test public void resolveViewNameAcceptHeaderDefaultView() throws Exception { request.addHeader("Accept", "application/json"); ViewResolver viewResolverMock1 = mock(ViewResolver.class); ViewResolver viewResolverMock2 = mock(ViewResolver.class); viewResolver.setViewResolvers(Arrays.asList(viewResolverMock1, viewResolverMock2)); View viewMock1 = mock(View.class, "application_xml"); View viewMock2 = mock(View.class, "text_html"); View viewMock3 = mock(View.class, "application_json"); List<View> defaultViews = new ArrayList<>(); defaultViews.add(viewMock3); viewResolver.setDefaultViews(defaultViews); viewResolver.afterPropertiesSet(); String viewName = "view"; Locale locale = Locale.ENGLISH; given(viewResolverMock1.resolveViewName(viewName, locale)).willReturn(viewMock1); given(viewResolverMock2.resolveViewName(viewName, locale)).willReturn(viewMock2); given(viewMock1.getContentType()).willReturn("application/xml"); given(viewMock2.getContentType()).willReturn("text/html;charset=ISO-8859-1"); given(viewMock3.getContentType()).willReturn("application/json"); View result = viewResolver.resolveViewName(viewName, locale); assertSame("Invalid view", viewMock3, result); }
@Test public void resolveViewNameFilenameDefaultView() throws Exception { request.setRequestURI("/test.json"); Map<String, MediaType> mapping = Collections.singletonMap("json", MediaType.APPLICATION_JSON); PathExtensionContentNegotiationStrategy pathStrategy = new PathExtensionContentNegotiationStrategy(mapping); viewResolver.setContentNegotiationManager(new ContentNegotiationManager(pathStrategy)); ViewResolver viewResolverMock1 = mock(ViewResolver.class); ViewResolver viewResolverMock2 = mock(ViewResolver.class); viewResolver.setViewResolvers(Arrays.asList(viewResolverMock1, viewResolverMock2)); View viewMock1 = mock(View.class, "application_xml"); View viewMock2 = mock(View.class, "text_html"); View viewMock3 = mock(View.class, "application_json"); List<View> defaultViews = new ArrayList<>(); defaultViews.add(viewMock3); viewResolver.setDefaultViews(defaultViews); viewResolver.afterPropertiesSet(); String viewName = "view"; Locale locale = Locale.ENGLISH; given(viewResolverMock1.resolveViewName(viewName, locale)).willReturn(viewMock1); given(viewResolverMock1.resolveViewName(viewName + ".json", locale)).willReturn(null); given(viewResolverMock2.resolveViewName(viewName, locale)).willReturn(viewMock2); given(viewResolverMock2.resolveViewName(viewName + ".json", locale)).willReturn(null); given(viewMock1.getContentType()).willReturn("application/xml"); given(viewMock2.getContentType()).willReturn("text/html;charset=ISO-8859-1"); given(viewMock3.getContentType()).willReturn("application/json"); View result = viewResolver.resolveViewName(viewName, locale); assertSame("Invalid view", viewMock3, result); }
cnViewResolver.setDefaultViews(viewList); cnViewResolver.setContentNegotiationManager(manager); cnViewResolver.afterPropertiesSet();
private void initContentNegotiatingViewResolver(View[] defaultViews) { // ContentNegotiatingResolver in the registry: elevate its precedence! this.order = (this.order != null ? this.order : Ordered.HIGHEST_PRECEDENCE); if (this.contentNegotiatingResolver != null) { if (!ObjectUtils.isEmpty(defaultViews)) { if (!CollectionUtils.isEmpty(this.contentNegotiatingResolver.getDefaultViews())) { List<View> views = new ArrayList<View>(this.contentNegotiatingResolver.getDefaultViews()); views.addAll(Arrays.asList(defaultViews)); this.contentNegotiatingResolver.setDefaultViews(views); } } } else { this.contentNegotiatingResolver = new ContentNegotiatingViewResolver(); this.contentNegotiatingResolver.setDefaultViews(Arrays.asList(defaultViews)); this.contentNegotiatingResolver.setViewResolvers(this.viewResolvers); this.contentNegotiatingResolver.setContentNegotiationManager(this.contentNegotiationManager); } }
@Component public class MyViewResolver { List<View> views = new ArrayList<View>(); public ViewResolver getResolver(ContentNegotiationManager manager) { ContentNegotiatingViewResolver contentNegotiatingViewResolver = new ContentNegotiatingViewResolver(); contentNegotiatingViewResolver.setOrder(0); contentNegotiatingViewResolver.setContentNegotiationManager(manager); List<View> views = new ArrayList<View>(); views.add(new CommonMappingJackson2JsonView()); contentNegotiatingViewResolver.setDefaultViews(views); return contentNegotiatingViewResolver; } }
@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; }
defaultViews.add(jsonView()); defaultViews.add(xmlView()); contentNegotiatingViewResolver.setDefaultViews(defaultViews); return contentNegotiatingViewResolver;
@Bean public ContentNegotiatingViewResolver contentViewResolver() { ContentNegotiationManagerFactoryBean contentNegotiationManager = new ContentNegotiationManagerFactoryBean(); contentNegotiationManager.addMediaType("json", MediaType.APPLICATION_JSON); InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/jsp/"); viewResolver.setSuffix(".jsp"); MappingJackson2JsonView defaultView = new MappingJackson2JsonView(); defaultView.setExtractValueFromSingleKeyModel(true); ContentNegotiatingViewResolver contentViewResolver = new ContentNegotiatingViewResolver(); contentViewResolver.setContentNegotiationManager(contentNegotiationManager.getObject()); contentViewResolver.setViewResolvers(Arrays.<ViewResolver> asList(viewResolver)); contentViewResolver.setDefaultViews(Arrays.<View> asList(defaultView)); return contentViewResolver; }