在使用Jersey的restful的过程中,对于Http Cache有一定的基础了解,
Cache-Control
- -private/public : private是并不能呗CDN或者代理接受,但是public可以
- -no-cache,no-store,max-age 属性值用来给Cache的特性设置
@GET
@Path("/map")
public Response queryMCSViewFields() {
CacheControl cc = new CacheControl();
cc.setMaxAge(300);
cc.setNoStore(true);
cc.setPrivate(true);
cc.setNoCache(false);
List<MCSAdaptiveModel> list = getCustomizeViewFieldService()
.queryMCSFields("MCS_ORDER_SCHEDULE");
Map<String, Object> map = new HashMap<String, Object>();
map.put("success", true);
map.put("data", list);
String jsonString = JSON.toJSONString(map);
ResponseBuilder builder = Response.ok(jsonString,
MediaType.APPLICATION_JSON);
builder.cacheControl(cc);
return builder.build();
}
Etag
也可以通过etag来根据etag来判断是否需要Cache
@Path("{id}")
@GET
@Produces(MediaType.APPLICATION_XML)
public Response getUserWithEtagSupport(@PathParam("id") Long id,
@Context Request request){
User user = userDB.get(id);
//generating Etag out of hashCode of user
EntityTag tag = new EntityTag(Integer.toString(user.hashCode()));
CacheControl cc = new CacheControl();
cc.setMaxAge(1000);
ResponseBuilder builder = request.evaluatePreconditions(tag);
if(builder!=null){
builder.cacheControl(cc);
return builder.build();
}
builder = Response.ok(user,MediaType.APPLICATION_XML);
builder.cacheControl(cc);
builder.tag(tag);
return builder.build();
}