public FormHttpMessageConverter() { this.supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED); this.supportedMediaTypes.add(MediaType.MULTIPART_FORM_DATA); StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(); stringHttpMessageConverter.setWriteAcceptCharset(false); // see SPR-7316 this.partConverters.add(new ByteArrayHttpMessageConverter()); this.partConverters.add(stringHttpMessageConverter); this.partConverters.add(new ResourceHttpMessageConverter()); applyDefaultCharset(); }
Assert.state(this.resourceHttpMessageConverter != null, "Not initialized"); setHeaders(response, resource, mediaType); this.resourceHttpMessageConverter.write(resource, mediaType, outputMessage);
@Override protected void writeInternal(Resource resource, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { writeContent(resource, outputMessage); }
@Test // SPR-14882 public void shouldNotReadInputStreamResource() throws IOException { ResourceHttpMessageConverter noStreamConverter = new ResourceHttpMessageConverter(false); try (InputStream body = getClass().getResourceAsStream("logo.jpg") ) { this.thrown.expect(HttpMessageNotReadableException.class); MockHttpInputMessage inputMessage = new MockHttpInputMessage(body); inputMessage.getHeaders().setContentType(MediaType.IMAGE_JPEG); noStreamConverter.read(InputStreamResource.class, inputMessage); } }
@Override protected MediaType getDefaultContentType(org.springframework.core.io.Resource resource) { try { MediaType ifAllElseFails = super.getDefaultContentType(resource); String fileName = resource.getFilename(); int lastPeriod; if (fileName != null && (fileName = fileName.toLowerCase()) != null && ((lastPeriod = fileName.lastIndexOf(".")) != -1)) { String ext = fileName.substring(lastPeriod + 1); if (mapOfExtensions.containsKey(ext)) { String canonicalExt = mapOfExtensions.get(ext); return mapOfMediaTypesToExtensions.get(canonicalExt); } } return ifAllElseFails; } catch (Exception e) { throw new RuntimeException(e); } } }
@Override protected MediaType getDefaultContentType(Resource resource) { MediaType contentType = null; if (resource instanceof WxMediaResource) { contentType = ((WxMediaResource) resource).getContentType(); } if (contentType == null && servletContext != null && resource.getFilename() != null) { String mimeType = servletContext.getMimeType(resource.getFilename()); if (StringUtils.hasText(mimeType)) { contentType = MediaType.parseMediaType(mimeType); } } if (contentType != null) { return contentType; } return super.getDefaultContentType(resource); }
public FormHttpMessageConverter() { this.supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED); this.supportedMediaTypes.add(MediaType.MULTIPART_FORM_DATA); StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(); stringHttpMessageConverter.setWriteAcceptCharset(false); // see SPR-7316 this.partConverters.add(new ByteArrayHttpMessageConverter()); this.partConverters.add(stringHttpMessageConverter); this.partConverters.add(new ResourceHttpMessageConverter()); applyDefaultCharset(); }
@Test public void shouldWriteImageResource() throws IOException { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); Resource body = new ClassPathResource("logo.jpg", getClass()); converter.write(body, null, outputMessage); assertEquals("Invalid content-type", MediaType.IMAGE_JPEG, outputMessage.getHeaders().getContentType()); assertEquals("Invalid content-length", body.getFile().length(), outputMessage.getHeaders().getContentLength()); }
@Override protected void writeInternal(Resource resource, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { writeContent(resource, outputMessage); }
public static RestTemplate getRestTemplate() { if (restTemplate == null) { restTemplate = new RestTemplate(); final List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>(); messageConverters.add(new ByteArrayHttpMessageConverter()); messageConverters.add(new ResourceHttpMessageConverter()); messageConverters.add(new StringHttpMessageConverter()); messageConverters.add(createMappingJackson2HttpMessageConverter()); restTemplate.setMessageConverters(messageConverters); } return restTemplate; }
@Test // SPR-10848 public void writeByteArrayNullMediaType() throws IOException { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); byte[] byteArray = {1, 2, 3}; Resource body = new ByteArrayResource(byteArray); converter.write(body, null, outputMessage); assertTrue(Arrays.equals(byteArray, outputMessage.getBodyAsBytes())); }
@Override protected void writeInternal(Resource resource, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { writeContent(resource, outputMessage); }
@Override public void afterPropertiesSet() throws Exception { resolveResourceLocations(); if (logger.isWarnEnabled() && CollectionUtils.isEmpty(this.locations)) { logger.warn("Locations list is empty. No resources will be served unless a " + "custom ResourceResolver is configured as an alternative to PathResourceResolver."); } if (this.resourceResolvers.isEmpty()) { this.resourceResolvers.add(new PathResourceResolver()); } initAllowedLocations(); // Initialize immutable resolver and transformer chains this.resolverChain = new DefaultResourceResolverChain(this.resourceResolvers); this.transformerChain = new DefaultResourceTransformerChain(this.resolverChain, this.resourceTransformers); if (this.resourceHttpMessageConverter == null) { this.resourceHttpMessageConverter = new ResourceHttpMessageConverter(); } if (this.resourceRegionHttpMessageConverter == null) { this.resourceRegionHttpMessageConverter = new ResourceRegionHttpMessageConverter(); } this.contentNegotiationStrategy = initContentNegotiationStrategy(); }
@Test // SPR-12999 public void writeContentNotClosingInputStream() throws Exception { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); Resource resource = mock(Resource.class); InputStream inputStream = mock(InputStream.class); given(resource.getInputStream()).willReturn(inputStream); given(inputStream.read(any())).willReturn(-1); doThrow(new NullPointerException()).when(inputStream).close(); converter.write(resource, MediaType.APPLICATION_OCTET_STREAM, outputMessage); assertEquals(0, outputMessage.getHeaders().getContentLength()); }
@Override protected void writeInternal(Resource resource, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { writeContent(resource, outputMessage); }
this.messageConverters.add(new ByteArrayHttpMessageConverter()); this.messageConverters.add(new StringHttpMessageConverter()); this.messageConverters.add(new ResourceHttpMessageConverter(false)); try { this.messageConverters.add(new SourceHttpMessageConverter<>());
Assert.state(this.resourceHttpMessageConverter != null, "Not initialized"); setHeaders(response, resource, mediaType); this.resourceHttpMessageConverter.write(resource, mediaType, outputMessage);
@Test public void handleReturnValueImage() throws Exception { this.servletRequest.addHeader("Accept", "*/*"); Method method = getClass().getDeclaredMethod("getImage"); MethodParameter returnType = new MethodParameter(method, -1); List<HttpMessageConverter<?>> converters = new ArrayList<>(); converters.add(new ResourceHttpMessageConverter()); RequestResponseBodyMethodProcessor processor = new RequestResponseBodyMethodProcessor(converters); ClassPathResource resource = new ClassPathResource("logo.jpg", getClass()); processor.writeWithMessageConverters(resource, returnType, this.request); assertEquals("image/jpeg", this.servletResponse.getHeader("Content-Type")); }
@Test // SPR-12999 @SuppressWarnings("unchecked") public void writeContentNotGettingInputStream() throws Exception { MockHttpOutputMessage outputMessage = new MockHttpOutputMessage(); Resource resource = mock(Resource.class); given(resource.getInputStream()).willThrow(FileNotFoundException.class); converter.write(resource, MediaType.APPLICATION_OCTET_STREAM, outputMessage); assertEquals(0, outputMessage.getHeaders().getContentLength()); }
@Before public void setup() { ByteArrayHttpMessageConverter emptyBodyConverter = new ByteArrayHttpMessageConverter(); emptyBodyConverter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON)); List<HttpMessageConverter<?>> converters = new ArrayList<>(3); converters.add(emptyBodyConverter); converters.add(new ByteArrayHttpMessageConverter()); converters.add(new ResourceHttpMessageConverter()); converters.add(new MappingJackson2HttpMessageConverter()); AllEncompassingFormHttpMessageConverter converter = new AllEncompassingFormHttpMessageConverter(); converter.setPartConverters(converters); restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory()); restTemplate.setMessageConverters(Collections.singletonList(converter)); }