为了从spring-mvc BufferedImage
中搜索服务Controller
(在服务类中绘制)的代码量最少,我想出了以下内容:
@GetMapping(value = "/image", produces = "image/png")
public StreamingResponseBody image() {
BufferedImage canvas = service.createImage();
return outputStream -> ImageIO.write(canvas, "png", outputStream);
}
到目前为止,非常好 - 通过<img src="/image">
在HTML中使用图片可以正常工作。
但是,spring根本不会发送任何Content-Type
标头。与响应中的X-Content-Type-Options: nosniff
服务一起,当直接打开图像URL时,这会导致浏览器窗口中的垃圾。
如何以最友好的方式提供内容类型标题(即不直接使用HttpServletResponse
)?
答案 0 :(得分:8)
您可以将其包装在ResponseEntity<...>
中,这样您就可以通过响应构建器轻松修改响应中的所有参数:
@GetMapping(value = "/image", produces = "image/png")
public ResponseEntity<StreamingResponseBody> image() {
BufferedImage canvas = service.createImage();
StreamingResponseBody stream = outputStream ->
ImageIO.write(canvas, "png", outputStream);
return ResponseEntity.ok()
.contentType(MediaType.IMAGE_PNG)
.body(stream);
}