【问题标题】:How to pass date(dd/MM/yyyy HH:mm) as a parameter in REST API如何在 REST API 中将日期(dd/MM/yyyy HH:mm)作为参数传递
【发布时间】:2016-04-09 16:40:07
【问题描述】:

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

public static final String 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 错误。 这是 REST URL

http://localhost:8089/stay/datecheck?dateCheckIn="28/01/2016 19:00"

【问题讨论】:

  • 问题是你用“/”不能用“-”代替吗?你需要这个方法来获得吗? post 方法在这里不起作用?
  • @Radu 我尝试使用 localhost:8089/stay/datecheck?dateCheckIn="28-01-2016 19:00" 但再次收到 404 错误
  • @RickS 我正在用 java 做它并编写基于 rest 的 web 服务
  • 您是否尝试将网址粘贴到网络浏览器中?我认为你需要逃避空间。另外,您是否应该在日期周围加上引号?

标签: java spring rest date datetime


【解决方案1】:

使用 %20 代替空格。您可以使用 %2F 代替斜线。但是,您必须在获得值后解码(将 %20 转换为空格,将 %2F 转换为斜线)。使用 %3A 代替冒号。您在这里有一个 URL 编码表:http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

最后一个提示:不要使用引号。

尝试类似:

http://localhost:8089/stay/datecheck?dateCheckIn=28%2F01%2F2016%2019%3A00

记得解码。

类似:String result = java.net.URLDecoder.decode(url, "UTF-8");

【讨论】:

    【解决方案2】:

    主要问题在这里:@PathVariable("dateCheckIn") @DateTimeFormat(iso= DateTimeFormat.ISO.DATE) String dateCheckIn

    dateCheckIn 不应该是 @PathVariable 而是 @RequestParam

    让我们看看区别:

    http://localhost:8089/stay/{path_var}/datecheck?{query_param}=some_value
    

    路径变量是路径的一部分,它必须存在才能使路径正确映射到您的方法。在实际调用中,您实际上从未为变量指定任何名称。查询参数(或请求参数)是出现在“?”之后的参数它出现在路径之后。在那里你总是写一个参数的名称,后跟“=”符号和值。它可能需要也可能不需要。请参见以下示例:

    路径字符串:

    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 编码或更改格式以使用破折号,或者在 Epoch 中发送时间和日期( unix time) 格式),但我相信 404 是因为您的方法上的路径字符串和注释错误。

    更多主题:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestparam

    http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-uri-templates

    【讨论】:

      【解决方案3】:

      你实际上有两个问题。

      • 您的 404 是因为您的 URL 不匹配任何模式。这几乎可以肯定是因为您没有对日期参数进行 MIME 编码。实际的浏览器会为您执行此操作,但代码/REST 客户端可能不会这样做,因为它们明智地不应该混淆您的输入。
      • 您的下一个问题是您的日期是@QueryParam 而不是@PathParam。解决编码问题后,您会发现您的日期将为空,因为该名称没有 PathParam

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-25
        • 1970-01-01
        • 1970-01-01
        • 2017-04-08
        相关资源
        最近更新 更多