Search code examples
springspring-bootcontent-type

spring boot setContentType is not working


I'm trying to return an image on spring-boot (1.2.2)
How should I set the content-type? Non of the following are working for me (meaning that response headers are not containing 'content-type' header at all ):

    @RequestMapping(value = "/files2/{file_name:.+}", method = RequestMethod.GET)
public ResponseEntity<InputStreamResource> getFile2(final HttpServletResponse response) throws IOException {
    InputStream is = //someInputStream...
    org.apache.commons.io.IOUtils.copy(is, response.getOutputStream());
    response.setContentType("image/jpeg");
    InputStreamResource inputStreamR = new InputStreamResource(is);
    return new ResponseEntity<>(inputStreamR, HttpStatus.OK);
}

@RequestMapping(value = "/files3/{file_name:.+}", method = RequestMethod.GET)
public HttpEntity<byte[]> getFile3() throws IOException {
    InputStream is = //someInputStream...
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.IMAGE_JPEG);
    return new HttpEntity<>(IOUtils.toByteArray(is), headers);
}

Solution

  • Got it... Had to add ByteArrayHttpMessageConverter to WebConfiguration class:

    @Configuration
    @EnableWebMvc
    @ComponentScan
    public class WebConfiguration extends WebMvcConfigurerAdapter {
    
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> httpMessageConverters) {
        httpMessageConverters.add(new ByteArrayHttpMessageConverter());
    }
    }
    

    And the then my second attempt (getFile3()) was working correctly