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 nestedViewResolverIsNotSpringBean() throws Exception { StaticWebApplicationContext webAppContext = new StaticWebApplicationContext(); webAppContext.setServletContext(new MockServletContext()); webAppContext.refresh(); InternalResourceViewResolver nestedResolver = new InternalResourceViewResolver(); nestedResolver.setApplicationContext(webAppContext); nestedResolver.setViewClass(InternalResourceView.class); viewResolver.setViewResolvers(new ArrayList<>(Arrays.asList(nestedResolver))); FixedContentNegotiationStrategy fixedStrategy = new FixedContentNegotiationStrategy(MediaType.TEXT_HTML); viewResolver.setContentNegotiationManager(new ContentNegotiationManager(fixedStrategy)); viewResolver.afterPropertiesSet(); String viewName = "view"; Locale locale = Locale.ENGLISH; View result = viewResolver.resolveViewName(viewName, locale); assertNotNull("Invalid view", result); }
@Test public void resolveViewNameWithRequestParameter() throws Exception { request.addParameter("format", "xls"); Map<String, MediaType> mapping = Collections.singletonMap("xls", MediaType.valueOf("application/vnd.ms-excel")); ParameterContentNegotiationStrategy paramStrategy = new ParameterContentNegotiationStrategy(mapping); viewResolver.setContentNegotiationManager(new ContentNegotiationManager(paramStrategy)); ViewResolver viewResolverMock = mock(ViewResolver.class); viewResolver.setViewResolvers(Collections.singletonList(viewResolverMock)); viewResolver.afterPropertiesSet(); View viewMock = mock(View.class, "application_xls"); String viewName = "view"; Locale locale = Locale.ENGLISH; given(viewResolverMock.resolveViewName(viewName, locale)).willReturn(null); given(viewResolverMock.resolveViewName(viewName + ".xls", locale)).willReturn(viewMock); given(viewMock.getContentType()).willReturn("application/vnd.ms-excel"); View result = viewResolver.resolveViewName(viewName, locale); assertSame("Invalid view", viewMock, result); }
@Test public void resolveViewNameWithAcceptHeader() throws Exception { request.addHeader("Accept", "application/vnd.ms-excel"); 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.addFileExtensionResolvers(extensionsResolver); viewResolver.setContentNegotiationManager(manager); ViewResolver viewResolverMock = mock(ViewResolver.class); viewResolver.setViewResolvers(Collections.singletonList(viewResolverMock)); View viewMock = mock(View.class, "application_xls"); String viewName = "view"; Locale locale = Locale.ENGLISH; given(viewResolverMock.resolveViewName(viewName, locale)).willReturn(null); given(viewResolverMock.resolveViewName(viewName + ".xls", locale)).willReturn(viewMock); given(viewMock.getContentType()).willReturn("application/vnd.ms-excel"); View result = viewResolver.resolveViewName(viewName, locale); assertSame("Invalid view", viewMock, 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); }
@Test public void resolveViewNameAcceptHeaderSortByQuality() throws Exception { request.addHeader("Accept", "text/plain;q=0.5, application/json"); viewResolver.setContentNegotiationManager(new ContentNegotiationManager(new HeaderContentNegotiationStrategy())); ViewResolver htmlViewResolver = mock(ViewResolver.class); ViewResolver jsonViewResolver = mock(ViewResolver.class); viewResolver.setViewResolvers(Arrays.asList(htmlViewResolver, jsonViewResolver)); View htmlView = mock(View.class, "text_html"); View jsonViewMock = mock(View.class, "application_json"); String viewName = "view"; Locale locale = Locale.ENGLISH; given(htmlViewResolver.resolveViewName(viewName, locale)).willReturn(htmlView); given(jsonViewResolver.resolveViewName(viewName, locale)).willReturn(jsonViewMock); given(htmlView.getContentType()).willReturn("text/html"); given(jsonViewMock.getContentType()).willReturn("application/json"); View result = viewResolver.resolveViewName(viewName, locale); assertSame("Invalid view", jsonViewMock, result); }
@Test public void resolveViewNameWithDefaultContentType() throws Exception { request.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); MediaType mediaType = new MediaType("application", "xml"); FixedContentNegotiationStrategy fixedStrategy = new FixedContentNegotiationStrategy(mediaType); viewResolver.setContentNegotiationManager(new ContentNegotiationManager(fixedStrategy)); ViewResolver viewResolverMock1 = mock(ViewResolver.class, "viewResolver1"); ViewResolver viewResolverMock2 = mock(ViewResolver.class, "viewResolver2"); viewResolver.setViewResolvers(Arrays.asList(viewResolverMock1, viewResolverMock2)); viewResolver.afterPropertiesSet(); View viewMock1 = mock(View.class, "application_xml"); View viewMock2 = mock(View.class, "text_html"); 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"); View result = viewResolver.resolveViewName(viewName, locale); assertSame("Invalid view", viewMock1, result); }
cnViewResolver.setContentNegotiationManager(manager); cnViewResolver.afterPropertiesSet();
public void setContentNegotiationManager(ContentNegotiationManager contentNegotiationManager){ this.contentNegotiationManager = contentNegotiationManager; super.setContentNegotiationManager(contentNegotiationManager); }
@Bean public ViewResolver setupViewResolver(ContentNegotiationManager manager){ List<ViewResolver> viewResolvers = new ArrayList<>(); viewResolvers.add(thymeleafViewResolver()); ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver(); resolver.setViewResolvers(viewResolvers); resolver.setContentNegotiationManager(manager); return resolver; }
@Bean public ViewResolver contentNegotiatingViewResolver(ContentNegotiationManager manager) { // Define the view resolvers List<ViewResolver> resolvers = new ArrayList<ViewResolver>(); resolvers.add(new JsonViewResolver()); // Create the CNVR plugging in the resolvers and the content-negotiation manager ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver(); resolver.setViewResolvers(resolvers); resolver.setContentNegotiationManager(manager); return resolver; } }
@Bean public ViewResolver contentNegotiatingViewResolver(ContentNegotiationManager manager) { ContentNegotiatingViewResolver resolver = new ContentNegotiatingViewResolver(); resolver.setContentNegotiationManager(manager); // Define all possible view resolvers List<ViewResolver> resolvers = new ArrayList<>(); resolvers.add(csvViewResolver()); resolvers.add(excelViewResolver()); resolvers.add(pdfViewResolver()); resolver.setViewResolvers(resolvers); return resolver; }
@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; } }
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); } }
@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 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; }