Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在REST API中将日期(dd/MM/yyyy HH:MM)作为参数传递_Java_Spring_Rest_Date_Datetime - Fatal编程技术网

Java 如何在REST API中将日期(dd/MM/yyyy HH:MM)作为参数传递

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

我正在尝试编写一个RESTAPI,其中我将日期作为URL参数传递。 日期格式为dd/MM/yyyy HH:MM; RESTAPI URL为

公共静态最终字符串GET_TestDate=“/stay/datecheck?dateCheckIn={dateCheckIn}”

剩下的方法是

     @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浏览器中?我认为您需要避开空格。此外,您是否打算在日期周围加引号?