【问题标题】:HttpServer Request get date range from query stringHttpServer 请求从查询字符串中获取日期范围
【发布时间】:2021-12-17 07:48:28
【问题描述】:

我是 Java 和 Vertx 的新手,我有一个格式如下的查询字符串:

GET /examples/1/data?date_1[gt]=2021-09-28&date_1[lt]=2021-10-28

这里我有这个date_1 参数,它在一定范围内。我一直在使用HttpServerRequest 类来提取整数等简单参数,但不知道如何处理这些范围参数。

使用简单的参数,我可以执行以下操作:

String param = request.getParam(paramName);
paramAsInteger = Integer.valueOf(paramAsString);

但是,对于如何处理 gtlt 选项以及我们有两次相同的参数这一事实感到困惑。

【问题讨论】:

    标签: java vert.x http-get


    【解决方案1】:

    您说解析这些标记有困难。以下是您可以处理的方法。

    1. 首先要明白,参数名是NOT "date1"

    2. 这里其实有两个参数 2.1。 “date_1[gt]”,值为“2021-09-28” 2.2. “date_1[lt]”,值为“2021-10-28”

    3. 这是因为在 URI 参数定义中所有内容,“=”号之前是参数名称,之后是参数值。

    4. 你可以这样做

    String dateAsString = request.getParam("date1[gt]");
    paramAsInteger = toDate(dateAsString)
    
    1. 要实现 toDate() 函数,请阅读这篇简单的文章如何使用标准库将字符串对象转换为数据对象 (link)

    【讨论】:

    • 啊,谢谢,我对这篇文章感到困惑,并认为 gt 和 lt 有点特别:hl7.org/fhir/stu3/search.html#number
    • 链接页面中的@Luca ltgt 实际上是参数value 的一部分,而不是name。所以如果你得到参数的值,你会得到类似gt100
    • 是的,就像我说的,我有点困惑......
    【解决方案2】:

    Vert.x 会将这些参数视为两个单独的参数。所以RoutingContext#queryParam("date_1[gt]") 只会给你[gt] 的值。如果您想要 [lt] 的值,则需要单独获取。

    话虽如此,您可以将这个繁琐的逻辑移到一个额外的处理程序中,并将值存储在RoutingContext 中。这样的事情可能会更容易:

    private void extractDates(RoutingContext ctx) {
        var startDate = ctx.queryParam("date_1[gt]");
        var endDate = ctx.queryParam("date_1[lt]");
    
        var parsedStartDate = DateTimeFormatter.ISO_LOCAL_DATE.parse(startDate.get(0));
        var parsedEndDate = DateTimeFormatter.ISO_LOCAL_DATE.parse(endDate.get(0));
    
        // things we put in the context here can be retrieved by later handlers
        ctx.put("startDate", parsedStartDate);
        ctx.put("endDate", parsedEndDate);
    
        ctx.next();
    }
    

    然后,在您的实际处理程序中,您可以按如下方式访问这两个日期:

    router.get("/date")
            .handler(this::extractDates)
            .handler(ctx -> {
                var responseBody = ctx.get("startDate") + " - " + ctx.get("endDate");
                ctx.end(responseBody);
            });
    

    这可以让您的实际业务逻辑保持简洁。

    【讨论】:

      猜你喜欢
      • 2017-08-05
      • 1970-01-01
      • 2016-10-27
      • 2014-07-19
      • 1970-01-01
      • 2020-03-01
      • 2021-04-27
      • 2018-05-25
      • 2014-06-27
      相关资源
      最近更新 更多