在使用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(); }