如何将缓存控制添加到@RestController servlet路径?

时间:2016-02-16 08:52:08

标签: java spring http

我有servlet通过spring提供图片资源:

@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/thumbnails", method = RequestMethod.GET)
public ResponseEntity<InputStreamResource> getThumbnail(int id) {
    return service.find(id);
}

生成的http标头:Cache-control: "max-age=0"

问题:如何仅针对该方法控制缓存标头?

4 个答案:

答案 0 :(得分:4)

我猜你可以实现上次修改的检查,Spring对此有所支持 - 参考API

这样的东西
@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/thumbnails", method = RequestMethod.GET)
public ResponseEntity<InputStreamResource> getThumbnail(int id) {


    youeObject = service.find(id);
    ResponseBuilder builder = Response.ok(youeObject);
    builder.cacheControl(CacheControl.maxAge(24, TimeUnit.HOURS)).cachePrivate());
    return builder.build();

}

答案 1 :(得分:3)

我结束如下,其中有效:

ResponseEntity.ok().lastModified(file.lastModified()).header("max-age", "86400");

我现在不知道为什么使用CacheControl类的方法不起作用。

答案 2 :(得分:2)

我正在使用以下内容:

public ResponseEntity getProducts(...) {
    ...
    return ResponseEntity.ok().cacheControl(CacheControl.maxAge(10, TimeUnit.MINUTES).cachePrivate()).body(productProxy);
}

答案 3 :(得分:-2)

You can specify the cache's maxage by setMaxAge() of CacheControl class.
Also you can set it to public or private according to your requirement

**Follow the code snippets**

@ResponseStatus(HttpStatus.OK)
@RequestMapping(value = "/thumbnails", method = RequestMethod.GET)
public ResponseEntity<InputStreamResource> getThumbnail(int id) {
BodyBuilder builder = (BodyBuilder) ResponseEntity.ok();
CacheControl cc = new CacheControl();
    cc.setMaxAge(64, TimeUnit.HOURS);
    cc.setPrivate(true);
     builder.cacheControl(cc);
    return builder.body(service.find(id));
    }