如何实现使用“If Modified since”的HTTP Conditional Get?

时间:2018-04-17 00:00:37

标签: http get http-headers conditional postman

我有以下HTTP GET请求:

@GET
@Path("{id}")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})  // Accept header
public Response getDetails(@PathParam("id") Integer id) {

    Details details = dao.getDetails(id);
    if (details == null) {
        // account was not found
        return Response
                .status(Response.Status.NOT_FOUND)
                .entity("<detailsNotFound />")
                .build();
    } else {
        details.setLink(new ArrayList<Link>());

        Link linkSelf = new Link();
        linkSelf.setRel("self"); // the "self" relationship
        linkSelf.setUri("/" + id);

        details.getLink().add(linkSelf);

        return Response.status(Response.Status.OK).entity(details).build();
    }
}

我想知道如何实现条件获取用它来调用 Id-Modified-Since 标题?

这是涉及的实体:

<details>
    <age>32</age>
    <id>1</id>
    <name>John Doe</name>
    <timestamp>2018-04-16T00:00:00+01:00</timestamp>
</details>

我正在使用POSTMAN尝试这个,如果这有所不同?

修改

这就是我现在所拥有的,但我的主要问题是知道如何将if-modified-since标头与数据库中条目的时间戳进行比较?

@GET
@Path("{id}")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})  // Accept header
public Response getDetails(@PathParam("id") Integer id,@Context HttpHeaders headers) {

    Details details = dao.getDetails(id);

    //Below requests the if-modified-since header
    //Check its not null and prints out the value
    if (headers != null) {
        List<String> ifModifiedSinceHeader = headers.getRequestHeader("if-modified-since");
        if (ifModifiedSinceHeader != null ) {
            for (String ifmodifiedsince : ifModifiedSinceHeader) {
                System.out.print("If-Modified-Since: "+ifmodifiedsince);
            }
        }
    } 

    if (details == null) {
        // account was not found
        return Response
                .status(Response.Status.NOT_FOUND)
                .entity("<detailsNotFound />")
                .build();
    } else {

        details.setLink(new ArrayList<Link>());

        Link linkSelf = new Link();
        linkSelf.setRel("self"); // the "self" relationship
        linkSelf.setUri("/" + id);

        details.getLink().add(linkSelf);

        return Response.status(Response.Status.OK).entity(details).build();
    }
}

0 个答案:

没有答案