用Jersey实现HTTP 304 Not Modified输出

1,简单来说,就是:

Jersey返回http 304没有遵循http 1.1协议,而是用javax.ws.rs.core.Response.notModified()方法,强制这个Response返回HTTP 304。

2,实现代码:

@Component
@Path(“/m/test”)
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class LastModified
{

@GET
@Path(“/lastmodify”)
public Response  testLastModified()
{
System.out.println(“测试 Last-modified”);
List<String> testList = new ArrayList<String>();
testList.add(“test 1″);
testList.add(“测试 2″);
ResponseBuilder builder = Response.ok(testList);
return builder.build().notModified().build();
}
}

这个例子,虽然没有设置”Last-Modified”, “Etag”等HTTP header,但仍能通过notModified()方法强制Server返回一个HTTP 304的Response。

3,Jersey可以用ResponseBuilder设置Response的HTTP Header。如:

@GET
@Path(“/lastmodify”)
public Response  testLastModified()
{
List<String> testList = new ArrayList<String>();
testList.add(“test 1″);
testList.add(“测试 2″);
ResponseBuilder builder = Response.ok(testList);

long oldTime = 1332991537656L;
Date lastModifyDate = new Date(oldTime);
builder.lastModified(lastModifyDate);
return builder.build();
}

就可以设置这个Response的“Last-Modified” header。但如果是为了和Request的“If-Modified-Since” header配合,返回http 304的话,这样做是没有效果的。

发表评论?

0 条评论。

发表评论


*


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>