Spring RestController returns 错误的内容类型

Spring RestController returns wrong content type

我正尝试通过以下方式 return Spring RestController 中的图像:

@GetMapping(path = "/images/{imageKey:.+}")
public ResponseEntity<Resource> getImageAsResource(
        @PathVariable("imageKey") String imageKey) {
    Resource resource = resourceService.getImage(imageKey);
    return ResponseEntity.ok(resource);
}

resourceService return 将图像作为 Java 资源对象。然而,Spring 将 Content-Type: 设置为 application/json 而不是正确的 image/... 类型,具体取决于生成的 HTTP 响应中的资源。 如何让 Spring 从 returned 资源中推断出正确的内容类型? returned 图片资源可以是 PNG、JPG 或 GIF。

    @GetMapping(path = "/images/{imageKey:.+}")
    public ResponseEntity<Resource> getImageAsResource(
            @PathVariable("imageKey") String imageKey) {
        Resource resource = resourceService.getImage(imageKey);
        Map<String, String> headers = new HashMap<>();
        //Change it based on the type of image your are loading
        headers.put("Content-type", MediaType.IMAGE_JPEG_VALUE);
        return new ResponseEntity<>(resource, headers, HttpStatus.OK);
    }

指定 content type 由映射中的方法生成。如果您不需要控制 HTTP headers 和响应代码,请使用 @ResponseBody 注释。

 @ResponseBody
 @GetMapping(path = "/images/{imageKey:.+}", produces = MediaType. IMAGE_JPEG_VALUE)
 public Resource getImageAsResource(
                         @PathVariable("imageKey") String imageKey) {
    return resourceService.getImage(imageKey);
 }