Вот пример того, как вы можете передать 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}}}