Как вернуть свойство Java 'java.time.Instant' в качестве значения json в ответе тела Restful API?

У меня есть служба API для отдыха Spring Boot, которая возвращает объект Java в своем ответе, который переводится в json.

Одним из свойств объекта Java является «Java.time.Instant». Как мне перевести это для возвращаемого объекта json?

Обновить

Я пытался использовать @JsonFormat, но это не работает...

Возвращаемый объект Java имеет свойство Instant...

 @JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ",timezone = "UTC")
 public Instant getRequested() {
     return Requested;
}

Это возвращается в теле ответа json как...

"requested": {
    "epochSecond": 1499342121,
    "nano": 868000000
},

Я использую Spring Boot 1.5.4.

метод управления - это...

@RequestMapping(value="/", method= RequestMethod.POST)
public AcceptedAccountRequest newRequest(@RequestBody NewAccountRequest aRequest) {
AcceptedAccountRequest anAcceptedRequest = createAccepted(aRequest);
return anAcceptedRequest;
}

person user2868835    schedule 06.07.2017    source источник
comment
Вы можете использовать .toEpochMilli который получает длинное значение. Затем вернуть его обратно в Instant проще с помощью .ofEpochMilli   -  person KarelG    schedule 06.07.2017
comment
Читая дальше об этом, общее мнение, похоже, заключается в том, что все свойства временной метки json возвращаются с использованием формата 8601. Является ли использование аннотации @jsonformat правильным способом для этого?   -  person user2868835    schedule 06.07.2017
comment
java.time.Instant имеет строковое представление ISO-8601, быстрый взгляд на Документация по API также раскрыла бы это, так что пока вы не используете какую-то странную сериализацию на основе отражения, все в порядке. Пожалуйста, используйте Google.   -  person specializt    schedule 06.07.2017
comment
Я пытался добавить @JsonFormat, но сгенерированный json не распознает это...   -  person user2868835    schedule 06.07.2017


Ответы (3)


Решил это... Мне не хватало зависимости jsr310 maven

<dependency>
  <groupId>com.fasterxml.jackson.datatype</groupId>
  <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>

Пояснение... если я хочу, чтобы все мгновенные свойства возвращались в json как UTC, должен ли я использовать следующую инструкцию формата, или есть ли другой лучший способ сделать это...

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ",timezone = "UTC")
person user2868835    schedule 06.07.2017
comment
Есть способ получше - добавьте в application.properties следующее: spring.jackson.serialization.write_dates_as_timestamps=false - person MatanRubin; 17.05.2018

  1. pom.xml добавить

    <dependency>
        <groupId>com.fasterxml.jackson.datatype</groupId>
        <artifactId>jackson-datatype-jsr310</artifactId>
    </dependency>
    
  2. application.properties добавить

    spring.jackson.serialization.write-dates-as-timestamps=false
    

ссылка https://codeboje.de/jackson-java-8-datetime-handling/

person Steve Nash    schedule 22.01.2019

Вы можете просто использовать java.time.Instant для их представления, используя .toString(). Если вы используете Spring, вам может потребоваться добавить @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) в ваш RestMethod, чтобы убедиться, что он правильно преобразован

person Manuel Kollegger    schedule 06.07.2017
comment
Я не могу заставить это работать. Любая аннотация, которую я добавляю в возвращаемый json, выглядит как ... validUntil: { epochSecond: 1499772556, nano: 656000000 } . - person user2868835; 06.07.2017
comment
Я использую Spring Boot 1.5.4. - person user2868835; 06.07.2017