spring 启动 setContentType 不工作
spring boot setContentType is not working
我正在尝试 return spring-boot (1.2.2)
上的图像
我应该如何设置content-type?
以下都不适合我(意味着响应 header 根本不包含 'content-type' header):
@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);
}
首先,除了 @RequestMapping
之外,您还需要应用 @ResponseBody
注释,除非您在 class 级别使用 @RestController
而不是 @Controller
。另外,尝试 @RequestMapping
的 produces
元素,例如
@RequestMapping(value = "/files2/{file_name:.+}", method = RequestMethod.GET, produces = {MediaType.IMAGE_JPEG_VALUE})
这应该 'narrow the primary mapping' 并确保设置了正确的内容类型。请参阅文档:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-ann-requestmapping-produces
知道了...必须将 ByteArrayHttpMessageConverter
添加到 WebConfiguration
class:
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfiguration extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> httpMessageConverters) {
httpMessageConverters.add(new ByteArrayHttpMessageConverter());
}
}
然后我的第二次尝试 (getFile3()
) 工作正常
我正在尝试 return spring-boot (1.2.2)
上的图像
我应该如何设置content-type?
以下都不适合我(意味着响应 header 根本不包含 'content-type' header):
@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);
}
首先,除了 @RequestMapping
之外,您还需要应用 @ResponseBody
注释,除非您在 class 级别使用 @RestController
而不是 @Controller
。另外,尝试 @RequestMapping
的 produces
元素,例如
@RequestMapping(value = "/files2/{file_name:.+}", method = RequestMethod.GET, produces = {MediaType.IMAGE_JPEG_VALUE})
这应该 'narrow the primary mapping' 并确保设置了正确的内容类型。请参阅文档:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-ann-requestmapping-produces
知道了...必须将 ByteArrayHttpMessageConverter
添加到 WebConfiguration
class:
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfiguration extends WebMvcConfigurerAdapter {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> httpMessageConverters) {
httpMessageConverters.add(new ByteArrayHttpMessageConverter());
}
}
然后我的第二次尝试 (getFile3()
) 工作正常