private static PathExtensionContentNegotiationStrategy initPathStrategy(ContentNegotiationManager manager) { Class<PathExtensionContentNegotiationStrategy> clazz = PathExtensionContentNegotiationStrategy.class; PathExtensionContentNegotiationStrategy strategy = manager.getStrategy(clazz); return (strategy != null ? strategy : new PathExtensionContentNegotiationStrategy()); }
private static PathExtensionContentNegotiationStrategy initPathStrategy(ContentNegotiationManager manager) { Class<PathExtensionContentNegotiationStrategy> clazz = PathExtensionContentNegotiationStrategy.class; PathExtensionContentNegotiationStrategy strategy = manager.getStrategy(clazz); return (strategy != null ? strategy : new PathExtensionContentNegotiationStrategy()); }
strategy = new PathExtensionContentNegotiationStrategy(this.mediaTypes);
@Test public void resolveMediaTypesFromMapping() throws Exception { this.servletRequest.setRequestURI("test.html"); PathExtensionContentNegotiationStrategy strategy = new PathExtensionContentNegotiationStrategy(); List<MediaType> mediaTypes = strategy.resolveMediaTypes(this.webRequest); assertEquals(Arrays.asList(new MediaType("text", "html")), mediaTypes); Map<String, MediaType> mapping = Collections.singletonMap("HTML", MediaType.APPLICATION_XHTML_XML); strategy = new PathExtensionContentNegotiationStrategy(mapping); mediaTypes = strategy.resolveMediaTypes(this.webRequest); assertEquals(Arrays.asList(new MediaType("application", "xhtml+xml")), mediaTypes); }
/** * Initialize the content negotiation strategy depending on the {@code ContentNegotiationManager} * setup and the availability of a {@code ServletContext}. * @see ServletPathExtensionContentNegotiationStrategy * @see PathExtensionContentNegotiationStrategy */ protected PathExtensionContentNegotiationStrategy initContentNegotiationStrategy() { Map<String, MediaType> mediaTypes = null; if (getContentNegotiationManager() != null) { PathExtensionContentNegotiationStrategy strategy = getContentNegotiationManager().getStrategy(PathExtensionContentNegotiationStrategy.class); if (strategy != null) { mediaTypes = new HashMap<>(strategy.getMediaTypes()); } } return (getServletContext() != null ? new ServletPathExtensionContentNegotiationStrategy(getServletContext(), mediaTypes) : new PathExtensionContentNegotiationStrategy(mediaTypes)); }
@Test public void resolveMediaTypesFromMediaTypeFactory() throws Exception { this.servletRequest.setRequestURI("test.xls"); PathExtensionContentNegotiationStrategy strategy = new PathExtensionContentNegotiationStrategy(); List<MediaType> mediaTypes = strategy.resolveMediaTypes(this.webRequest); assertEquals(Arrays.asList(new MediaType("application", "vnd.ms-excel")), mediaTypes); }
@Test public void getMediaTypeFilenameWithEncodedURI() throws Exception { this.servletRequest.setRequestURI("/quo%20vadis%3f.html"); PathExtensionContentNegotiationStrategy strategy = new PathExtensionContentNegotiationStrategy(); List<MediaType> result = strategy.resolveMediaTypes(webRequest); assertEquals("Invalid content type", Collections.singletonList(new MediaType("text", "html")), result); }
@Test public void resolveMediaTypesIgnoreUnknownExtension() throws Exception { this.servletRequest.setRequestURI("test.foobar"); PathExtensionContentNegotiationStrategy strategy = new PathExtensionContentNegotiationStrategy(); List<MediaType> mediaTypes = strategy.resolveMediaTypes(this.webRequest); assertEquals(ContentNegotiationStrategy.MEDIA_TYPE_ALL_LIST, mediaTypes); }
@Test(expected = HttpMediaTypeNotAcceptableException.class) public void resolveMediaTypesDoNotIgnoreUnknownExtension() throws Exception { this.servletRequest.setRequestURI("test.foobar"); PathExtensionContentNegotiationStrategy strategy = new PathExtensionContentNegotiationStrategy(); strategy.setIgnoreUnknownExtensions(false); strategy.resolveMediaTypes(this.webRequest); }
strategy = new PathExtensionContentNegotiationStrategy(this.mediaTypes);
/** * Initialize the content negotiation strategy depending on the {@code ContentNegotiationManager} * setup and the availability of a {@code ServletContext}. * @see ServletPathExtensionContentNegotiationStrategy * @see PathExtensionContentNegotiationStrategy */ protected PathExtensionContentNegotiationStrategy initContentNegotiationStrategy() { Map<String, MediaType> mediaTypes = null; if (getContentNegotiationManager() != null) { PathExtensionContentNegotiationStrategy strategy = getContentNegotiationManager().getStrategy(PathExtensionContentNegotiationStrategy.class); if (strategy != null) { mediaTypes = new HashMap<>(strategy.getMediaTypes()); } } return (getServletContext() != null ? new ServletPathExtensionContentNegotiationStrategy(getServletContext(), mediaTypes) : new PathExtensionContentNegotiationStrategy(mediaTypes)); }
@Test public void useRegisteredSuffixPatternMatchInitialization() { Map<String, MediaType> fileExtensions = Collections.singletonMap("json", MediaType.APPLICATION_JSON); PathExtensionContentNegotiationStrategy strategy = new PathExtensionContentNegotiationStrategy(fileExtensions); ContentNegotiationManager manager = new ContentNegotiationManager(strategy); final Set<String> extensions = new HashSet<>(); RequestMappingHandlerMapping hm = new RequestMappingHandlerMapping() { @Override protected RequestMappingInfo getMappingForMethod(Method method, Class<?> handlerType) { extensions.addAll(getFileExtensions()); return super.getMappingForMethod(method, handlerType); } }; wac.registerSingleton("testController", ComposedAnnotationController.class); wac.refresh(); hm.setContentNegotiationManager(manager); hm.setUseRegisteredSuffixPatternMatch(true); hm.setApplicationContext(wac); hm.afterPropertiesSet(); assertEquals(Collections.singleton("json"), extensions); }
@Test public void getMediaTypeFilenameWithContextPath() throws Exception { PathExtensionContentNegotiationStrategy strategy = new PathExtensionContentNegotiationStrategy(); this.servletRequest.setContextPath("/project-1.0.0.M3"); this.servletRequest.setRequestURI("/project-1.0.0.M3/"); assertEquals("Context path should be excluded", ContentNegotiationStrategy.MEDIA_TYPE_ALL_LIST, strategy.resolveMediaTypes(webRequest)); this.servletRequest.setRequestURI("/project-1.0.0.M3"); assertEquals("Context path should be excluded", ContentNegotiationStrategy.MEDIA_TYPE_ALL_LIST, strategy.resolveMediaTypes(webRequest)); }
@Test public void useRegisteredSuffixPatternMatch() { assertTrue(this.handlerMapping.useSuffixPatternMatch()); assertFalse(this.handlerMapping.useRegisteredSuffixPatternMatch()); Map<String, MediaType> fileExtensions = Collections.singletonMap("json", MediaType.APPLICATION_JSON); PathExtensionContentNegotiationStrategy strategy = new PathExtensionContentNegotiationStrategy(fileExtensions); ContentNegotiationManager manager = new ContentNegotiationManager(strategy); this.handlerMapping.setContentNegotiationManager(manager); this.handlerMapping.setUseRegisteredSuffixPatternMatch(true); this.handlerMapping.afterPropertiesSet(); assertTrue(this.handlerMapping.useSuffixPatternMatch()); assertTrue(this.handlerMapping.useRegisteredSuffixPatternMatch()); assertEquals(Arrays.asList("json"), this.handlerMapping.getFileExtensions()); }
@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); }
private static PathExtensionContentNegotiationStrategy initPathStrategy(ContentNegotiationManager manager) { Class<PathExtensionContentNegotiationStrategy> clazz = PathExtensionContentNegotiationStrategy.class; PathExtensionContentNegotiationStrategy strategy = manager.getStrategy(clazz); return (strategy != null ? strategy : new PathExtensionContentNegotiationStrategy()); }
/** * Initialize the content negotiation strategy depending on the {@code ContentNegotiationManager} * setup and the availability of a {@code ServletContext}. * @see ServletPathExtensionContentNegotiationStrategy * @see PathExtensionContentNegotiationStrategy */ protected PathExtensionContentNegotiationStrategy initContentNegotiationStrategy() { Map<String, MediaType> mediaTypes = null; if (getContentNegotiationManager() != null) { PathExtensionContentNegotiationStrategy strategy = getContentNegotiationManager().getStrategy(PathExtensionContentNegotiationStrategy.class); if (strategy != null) { mediaTypes = new HashMap<String, MediaType>(strategy.getMediaTypes()); } } return (getServletContext() != null ? new ServletPathExtensionContentNegotiationStrategy(getServletContext(), mediaTypes) : new PathExtensionContentNegotiationStrategy(mediaTypes)); }
strategy = new ServletPathExtensionContentNegotiationStrategy(this.servletContext, this.mediaTypes); } else { strategy = new PathExtensionContentNegotiationStrategy(this.mediaTypes);
strategy = new PathExtensionContentNegotiationStrategy(this.mediaTypes);
ContentNegotiationStrategy extensionStrategy = new PathExtensionContentNegotiationStrategy(mediaTypes); ContentNegotiationStrategy mixedStrategy = new ContentNegotiationManager(headerStrategy, extensionStrategy);