@Test(expected = HttpMediaTypeNotAcceptableException.class) public void resolveMediaTypesParseError() throws Exception { this.servletRequest.addHeader("Accept", "textplain; q=0.5"); this.strategy.resolveMediaTypes(this.webRequest); }
@Test // SPR-14506 public void resolveMediaTypesFromMultipleHeaderValues() throws Exception { this.servletRequest.addHeader("Accept", "text/plain; q=0.5, text/html"); this.servletRequest.addHeader("Accept", "text/x-dvi; q=0.8, text/x-c"); List<MediaType> mediaTypes = this.strategy.resolveMediaTypes(this.webRequest); assertEquals(4, mediaTypes.size()); assertEquals("text/html", mediaTypes.get(0).toString()); assertEquals("text/x-c", mediaTypes.get(1).toString()); assertEquals("text/x-dvi;q=0.8", mediaTypes.get(2).toString()); assertEquals("text/plain;q=0.5", mediaTypes.get(3).toString()); }
@Test public void resolveMediaTypes() throws Exception { this.servletRequest.addHeader("Accept", "text/plain; q=0.5, text/html, text/x-dvi; q=0.8, text/x-c"); List<MediaType> mediaTypes = this.strategy.resolveMediaTypes(this.webRequest); assertEquals(4, mediaTypes.size()); assertEquals("text/html", mediaTypes.get(0).toString()); assertEquals("text/x-c", mediaTypes.get(1).toString()); assertEquals("text/x-dvi;q=0.8", mediaTypes.get(2).toString()); assertEquals("text/plain;q=0.5", mediaTypes.get(3).toString()); }
@Override public List<MediaType> resolveMediaTypes(NativeWebRequest request) throws HttpMediaTypeNotAcceptableException { final List<MediaType> supportedMediaTypes = super.resolveMediaTypes(request); final String userAgent = request.getHeader(HttpHeaders.USER_AGENT); if (userAgent != null && userAgent.contains("Mozilla/5.0") && !supportedMediaTypes.contains(MediaType.APPLICATION_JSON)) { return Collections.singletonList(MediaType.TEXT_HTML); } return Collections.singletonList(MediaType.APPLICATION_JSON); } }