Java Spring控制器:StreamingResponseBody的内容类型
为了从spring mvcJava Spring控制器:StreamingResponseBody的内容类型,java,spring,spring-mvc,Java,Spring,Spring Mvc,为了从spring mvc控制器中搜索服务于BuffereImage(绘制在服务类中)的最少代码量,我提出了以下建议: @GetMapping(value = "/image", produces = "image/png") public StreamingResponseBody image() { BufferedImage canvas = service.createImage(); return outputStream -> ImageIO.write(can
控制器
中搜索服务于BuffereImage
(绘制在服务类中)的最少代码量,我提出了以下建议:
@GetMapping(value = "/image", produces = "image/png")
public StreamingResponseBody image() {
BufferedImage canvas = service.createImage();
return outputStream -> ImageIO.write(canvas, "png", outputStream);
}
到目前为止,还不错-通过
在HTML中使用图像效果很好
但是,spring根本不发送任何内容类型
标题。再加上在响应中提供X-Content-Type-Options:nosniff
,这将导致直接打开图像URL时浏览器窗口中出现垃圾
如何以最为spring友好的方式(即不直接使用
HttpServletResponse
)提供内容类型标题?您可以将其包装在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);
}
@GetMapping(value=“/image”,products=“image/png”)
公众反应形象(){
BuffereImage canvas=service.createImage();
StreamingResponseBody流=outputStream->
写入(画布,“png”,输出流);
返回ResponseEntity.ok()
.contentType(MediaType.IMAGE\u PNG)
.身体(溪流);
}
您不需要。。。。。。