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

时间:2011-05-31 02:17:11

标签: spring spring-mvc

我试图在Spring WebMVC 3.0.5控制器中使用ResponseEntity返回类型。我正在返回一个图像,所以我想使用以下代码将内容类型设置为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);
}

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

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

4 个答案:

答案 0 :(得分:10)

尝试注入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);
        }

答案 1 :(得分:9)

另一个命题:

return ResponseEntity
                  .ok()
                  .contentType(MediaType.IMAGE_GIF)
                  .body(resource);

答案 2 :(得分:0)

这两种方法是正确的。您也可以使用 ResponseEntity<?> 位于顶部,因此您可以发送多种类型的数据。

答案 3 :(得分:0)

这应该是设置所有参数(如httpStatus,contentType和body)的方法

  

ResponseEntity.status(status).contentType(MediaType.APPLICATION_JSON).body(response);

此示例使用ResponseEntity.BodyBuilder接口。