为了寻找最少的代码来为spring-mvc Controller中的BufferedImage (在服务类中绘制)提供服务,我想出了以下几点:
@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时,再加上响应中的serving URL,这会导致浏览器窗口中出现垃圾。
如何以对spring最友好的方式提供内容类型的头文件(即不直接使用HttpServletResponse )?
发布于 2017-11-17 07:02:59
您可以将其封装在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);
}https://stackoverflow.com/questions/47339742
复制相似问题