gpt4 book ai didi

micronaut 将请求参数转换为 Instant 或 ZonedDateTime

转载 作者:行者123 更新时间:2023-12-04 01:30:10 26 4
gpt4 key购买 nike

我正在使用 Micronaut 1.3.4,我正在尝试将输入转换为 Instant。到目前为止,我尝试了很多方法,但都没有成功。以下代码仅显示了我尝试过的两种情况,但都没有奏效。

我想将输入日期转换为 InstantOffsetDateTime

    @Get("/...")
public List<Obj> method(
// @Format("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
// Instant startDateTime,
@Format("yyyy-MM-dd")
LocalDate endDateTime
) {

如果可能,我想使用 ISO 8601。

我尝试过的输入:
2013-02-04
2013-02-04T22:44:30.652Z
...

我得到的输出是:
"message": "Required argument [LocalDate endDateTime] not specified",

我的后备是:
        String startDateTime

Instant parse = Instant.parse(startDateTime);
OffsetDateTime parse = OffsetDateTime.parse(startDateTime);

但我还是想知道如何用 Micronaut 做到这一点。

最佳答案

这是您如何通过 LocalDateTime 的示例作为 Micronaut 中的查询参数:

@Get("/local")
public String local(@Format("yyyy-MM-dd'T'HH:mm:ss") @QueryValue LocalDateTime time) {
return "Time " + DateTimeFormatter.ISO_DATE_TIME.format(time);
}

示例 curl 调用结果:
$ curl http://localhost:8080/example/local?time=2020-04-13T21:13:59
Time 2020-04-13T21:13:59

您可以使用 LocalDateTime当时区始终相同时。您可以将其转换为 Instant像这样 time.atZone(ZoneId.systemDefault()).toInstant() .

当时区可以不同并且必须是输入时间的一部分时,您可以使用 ZonedDateTime参数如下:

@Get("/zoned")
public String method(@Format("yyyy-MM-dd'T'HH:mm:ss.SSSZ") @QueryValue ZonedDateTime time) {
return "Time " + DateTimeFormatter.ISO_DATE_TIME.format(time);
}

哪里转换成 Instant很简单: time.toInstant()
示例 curl 调用结果:
$ curl http://localhost:8080/example/zoned?time=2020-04-13T21:13:59.123-0100
Time 2020-04-13T21:13:59.123-01:00

当您以错误格式输入时间查询参数时(此处缺少秒数和区域偏移量),它的行为如下:
$ curl http://localhost:8080/example/zoned?time=2020-04-13T21:13:59
{"message":"Required QueryValue [time] not specified","path":"/time","_links":{"self":{"href":"/example/zoned?time=2020-04-13T21:13:59","templated":false}}}

您还可以使用时间作为请求路径的一部分:

@Get("/local/{time}")
public String local(@Format("yyyy-MM-dd'T'HH:mm:ss") LocalDateTime time) {
return "Time from request path " + DateTimeFormatter.ISO_DATE_TIME.format(time);
}

然后示例 curl 调用将是:
$ curl http://localhost:8080/example/local/2020-04-13T21:13:59
Time from request path 2020-04-13T21:13:59

当您在路径中以错误格式输入时间(此处为不需要的几分之一秒)时,它的行为如下:
$ curl http://localhost:8080/example/local/2020-04-13T21:13:59.111
{"message":"Failed to convert argument [time] for value [2020-04-13T21:13:59.111] due to: Text '2020-04-13T21:13:59.111' could not be parsed, unparsed text found at index 19","path":"/time","_links":{"self":{"href":"/example/local/2020-04-13T21:13:59.111","templated":false}}}

关于micronaut 将请求参数转换为 Instant 或 ZonedDateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61193705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com