我有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"
。
问题:如何仅针对该方法控制缓存标头?
答案 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));
}