Jersey使用HTTP CACHE

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

	}

猜你喜欢

转载自cywhoyi.iteye.com/blog/1963514
今日推荐