作者:叨B叨B叨叨叨 | 来源:互联网 | 2023-08-16 17:02
篇首语:本文由编程笔记#小编为大家整理,主要介绍了实现条件-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(" ") .build(); }else{ car.setLink(new ArrayList()); 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(); } }
其中一个实体的示例:
3 03G333 Ford Focus 2018-03-23 10:00:05.772
答案
感谢@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(); } }