Java 如何在REST API中将日期(dd/MM/yyyy HH:MM)作为参数传递
我正在尝试编写一个RESTAPI,其中我将日期作为URL参数传递。 日期格式为dd/MM/yyyy HH:MM; RESTAPI URL为 公共静态最终字符串GET_TestDate=“/stay/datecheck?dateCheckIn={dateCheckIn}”强> 剩下的方法是Java 如何在REST API中将日期(dd/MM/yyyy HH:MM)作为参数传递,java,spring,rest,date,datetime,Java,Spring,Rest,Date,Datetime,我正在尝试编写一个RESTAPI,其中我将日期作为URL参数传递。 日期格式为dd/MM/yyyy HH:MM; RESTAPI URL为 公共静态最终字符串GET_TestDate=“/stay/datecheck?dateCheckIn={dateCheckIn}” 剩下的方法是 @RequestMapping(value = HotelRestURIConstants.GET_TestDate, method = RequestMethod.GET) public
@RequestMapping(value = HotelRestURIConstants.GET_TestDate, method = RequestMethod.GET)
public @ResponseBody String getDate(@PathVariable("dateCheckIn") @DateTimeFormat(iso= DateTimeFormat.ISO.DATE) String dateCheckIn) {
logger.info("passing date as a param");
String str="date"+dateCheckIn;
return str;
}
但是当我使用REST客户端调用这个api时,我得到了404错误。
这是RESTURL
http://localhost:8089/stay/datecheck?dateCheckIn="28/01/2016 19:00"
使用%20代替空格。您可以使用%2F代替斜杠。但是,在获得值后,必须进行解码(将%20转换为空格,将%2F转换为斜杠)。使用%3A代替冒号。这里有一个URL编码表: 最后一点提示:不要使用引号 尝试以下方法:
http://localhost:8089/stay/datecheck?dateCheckIn=28%2F01%2F2016%2019%3A00
记得解码它
类似于:
stringresult=java.net.urldecker.decode(url,“UTF-8”)代码>主要问题是:@PathVariable(“dateCheckIn”)@DateTimeFormat(iso=DateTimeFormat.iso.DATE)字符串dateCheckIn
dateCheckIn不应为@PathVariable,而应为@RequestParam
让我们看看区别:
http://localhost:8089/stay/{path_var}/datecheck?{query_param}=some_value
Path变量是路径的一部分,它必须存在,路径才能正确映射到方法。在实际调用中,您从未实际为变量指定任何名称。查询参数(或请求参数)是出现在路径后面的“?”之后的参数。在这里,您总是写参数的名称,后跟“=”符号和值。可能需要,也可能不需要。请参见以下示例:
路径字符串:
String GET_TestDate = "/stay/{path_var}/datecheck";
参数注释:
@PathVariable("path_var") Integer var1, @RequestParam("query_param") String
实际通话:
http://localhost:8089/stay/1/datecheck?query_param=abc
填充的值:
var1 = 1
var2 = "abc"
可能还有其他问题(比如URL中使用的日期格式-不应该使用引号和空格,而应该使用URL编码,或者将格式更改为使用破折号,或者以历元(unix时间)格式发送时间和日期),但我相信404是因为方法上的路径字符串和注释错误
有关此主题的更多信息:
实际上,您有两个问题
- 您的404是因为您的URL与任何模式都不匹配。这几乎可以肯定,因为您没有对日期参数进行MIME编码。一个真正的浏览器可以为您做到这一点,但代码/REST客户端可能不会,因为它们明智地不应该干扰您的输入
- 下一个问题是您的日期是@QueryParam,而不是@PathParam。一旦您解决了编码问题,您就会发现您的日期将为空,因为没有该名称的PathParam
问题是你用“/”不能用“-”来代替吗?您是否需要此方法作为get?一个post方法在这里不起作用?@Radu我在19:00时尝试过“但又得到了404”error@RickS我正在用java编写基于rest的web服务。您是否尝试将url粘贴到web浏览器中?我认为您需要避开空格。此外,您是否打算在日期周围加引号?