实现条件-GET

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现条件-GET相关的知识,希望对你有一定的参考价值。

我有一个RESTful Web服务,使用Java连接到包含汽车的数据库,并使用Postman进行CRUD操作和测试。

目前,当数据库中的汽车成功返回时,它只使用传统的HTTP GET返回状态200ok。

我现在正在尝试实现条件GET,以便在提交第二个GET请求并且尚未从先前的GET请求修改实体时返回状态304。

阅读条件GET,我知道它使用Last-modified和if-modified-since标题,但在如何实现这一点上却很困难。

在db中,我有一个触发器来更新与每个实体相关的TIMESTAMP,并且我认为这将是一个值,它将被检查以查看自上次请求以来该实体是否已被修改?

任何帮助赞赏

当前的GET请求:

@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Path("{reg}")
public Response getOneCar(@PathParam("reg") String reg) {

    Car car = dao.getCarDetails(reg);
    System.out.println("GET CarReg == "+reg);

    if(car == null){ // no car with that reg exists
        return Response
                .status(Response.Status.NOT_FOUND)
                .entity("<carNotFound reg='"+reg+"' />")
                .build();
    }else{   

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

        Link linkSelf = new Link();
        linkSelf.setRel("self");
        linkSelf.setUri(context.getPath());

        Link deleteLink = new Link();
        deleteLink.setRel("/linkrels/car/delete");
        deleteLink.setUri(context.getPath());

        Link updateLink = new Link();
        updateLink.setRel("/linkrels/car/update");
        updateLink.setUri(context.getPath());


        car.getLink().add(linkSelf);
        car.getLink().add(deleteLink);
        car.getLink().add(updateLink);


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

其中一个实体的示例:

<car>
    <id>3</id>
    <regNo>03G333</regNo>
    <make>Ford</make>
    <model>Focus</model>
    <link rel="self" uri="cars/03G333"/>
    <link rel="/linkrels/car/delete" uri="cars/03G333"/>
    <link rel="/linkrels/car/update" uri="cars/03G333"/>
    <time>2018-03-23 10:00:05.772</time>
</car>
答案

感谢@Andrew的回复,

我目前正在尝试使用“If-Modified-Since”和“Last-Modified”标题执行此操作。

在服务器上我向客户端发送一个“Last-Modified”标头,它从数据库中的当前汽车获取时间戳,如图所示 - > postman server responce

现在我正在尝试配置邮递员发送回“if-Modified-Since”标题。

如果我比较这些值并且根据时间戳相同或不同,我可以确定要发回的响应。

目前无法配置邮递员发送“If-Modified-Since”标题,然后以某种方式在服务器上获取此值。

  Date date = null;

        try {

          SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
          String lastmodifiedDate = car.getTime();               
          date = sdf.parse(lastmodifiedDate);

        } catch (ParseException ex) {

        } 

          return Response
                .status(Response.Status.OK).lastModified(date) 
                .entity(car)
                .build();

    }
}

以上是关于实现条件-GET的主要内容,如果未能解决你的问题,请参考以下文章

PHP WordPress条件为主页SlideDeck主题代码片段

Python snippet(代码片段)

片段的条件自定义 OnBackPress

条件片段和导航重用

有条件地导入 python 类的片段

4.3 合并重复的条件执行片段