使用ResponseEntity <Resource>发送自定义Content-Type

Nig*_*gel 11 spring spring-mvc

我试图在我的Spring WebMVC 3.0.5控制器中使用ResponseEntity返回类型.我正在返回一个图像,所以我想使用以下代码将Content Type设置为image/gif:

@RequestMapping(value="/*.gif")
public ResponseEntity<Resource> sendGif() throws FileNotFoundException {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.IMAGE_GIF);
    return new ResponseEntity<Resource>(ctx.getResource("/images/space.gif"), headers, HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)

但是,返回类型被重写为ResourceHttpMessageConverter中的text/html.

除了实现我自己的HttpMessageConverter并将其注入AnnotationMethodHandlerAdapter之外,有什么方法可以强制使用Content-Type?

gou*_*uki 11

尝试注入HttpServletResponse对象并从那里强制内容类型.

 @RequestMapping(value="/*.gif") 
 public ResponseEntity<Resource> sendGif(final HttpServletResponse response) throws FileNotFoundException {
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.IMAGE_GIF);
            response.setContentType("image/gif"); // set the content type
            return new ResponseEntity<Resource>(ctx.getResource("/images/space.gif"), headers, HttpStatus.OK);
        }
Run Code Online (Sandbox Code Playgroud)


Mou*_*kir 10

另一个主张:

return ResponseEntity
                  .ok()
                  .contentType(MediaType.IMAGE_GIF)
                  .body(resource);
Run Code Online (Sandbox Code Playgroud)