现有的api具有以下代码:
@GetMapping(value = "/getAmount")
public long getAmount(){
Date d = new Date();
long amountFetchedFromDb = callToDatabase(d);
return amountFetchedFromDb;
}
现在我需要按以下方式更改功能:
@GetMapping(value = "/getAmount")
public long getAmount(){
Date d = new Date();
<CALL TO A NEW REST API PASSING IT THE DATE d AND THE NEW API
WILL MAKE THE DB CALL AND RETURN THE AMOUNT>
return amount;
}
现在,我创建了一个新的rest服务,该服务将java日期作为路径变量,如下所示:
@GetMapping("/getAmount/{dateTo}")
public long getAmount(@PathVariable Date dateTo){
long amountFetchedFromDb = callToDatabase(d);
return amountFetchedFromDb;
}
现在我需要测试我的新服务。如何在以下请求中传递日期:
http://localhost:8080/getAmount/?
现有api中没有使用日期格式。它只是创建一个Java日期并将查询传递给Db。没有转换。因此,我不确定它将传递给我什么。因此,我做了一个简单的rest服务,该服务返回新的Date()。当我运行它时,我得到响应1530137142067(今天是6月27日)。这是什么格式?
我希望这不要太令人困惑。如果我的查询不清楚,请告诉我。
答案 0 :(得分:2)
有两种方法可以实现这一目标。
传递简单的String
日期作为路径变量。然后使用SimpleDateFormat
将String
解析为一个日期对象。请注意,以这种方式您将要处理可能失败的转换。您的客户还应该知道他们将使用的日期格式。我认为这不是最好的方法,但是可行的。
传入定义一个纪元的数字,并使用它来构造您的日期对象。假设您对非常好的精度(纳秒等)不感兴趣,那么您应该没事。
因此,在第一个选项的情况下,您的get请求将如下所示:
someurl/getAmount/28-06-2018/
第二次:
someurl/getAmount/1530137142067
我认为后者是最好的。
答案 1 :(得分:0)
值1530137142067
是自Unix时代以来的毫秒数。
示例
$ date
Wed, Jun 27, 2018 3:28:30 PM
$ date +%s
1530138468
+%s
选项要求date命令返回自纪元以来的 seconds 。如果将值格式设置为1530137142.067
,则可以看到它与我的系统显示的内容非常接近。
这可能是传输时间戳作为参数 的“最佳”(最便携)方式,只要两端都同意时区 。 date +%s
命令返回的值以UTC为单位。为了获得最大的可移植性,您应该在所有地方使用UTC并仅在输出时转换为本地时区。内部,一切都应该是UTC。
答案 2 :(得分:0)
如果要使用PathVariable,可以使用以下示例方法:
//You can consume the path .../getAmount/2019-04-25
@GetMapping("/getAmount/{dateTo}")
public long getAmount(@PathVariable("dateTo") @DateTimeFormat(pattern = "yyyy-MM-dd") Date dateTo) {
long amountFetchedFromDb = callToDatabase(dateTo);
return amountFetchedFromDb;
}