5

我有一个 Spring Boot RESTful API 服务,它在其响应中返回一个 Java 对象,该对象被翻译成 json。

Java 对象属性之一是“Java.time.Instant”。我应该如何为返回的 json 对象翻译这个?

更新

我试过使用@JsonFormat 但这不起作用......

返回的 Java 对象具有“即时”属性...

 @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;
}
4

3 回答 3

4
  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/

于 2019-01-22T12:58:02.410 回答
3

解决了...我错过了 jsr310 maven 依赖项

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

澄清一下...如果我希望所有 Instant 属性都以 json 格式返回为 UTC,我应该使用以下格式指令,还是有另一种更好的方法来做到这一点...

@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ",timezone = "UTC")
于 2017-07-06T12:21:55.073 回答
1

您可以简单地使用java.time.Instant它们的表示.toString() 如果您使用的是 Spring,您可能必须将 @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) 添加到您的 RestMethod 以确保它被正确转换

于 2017-07-06T11:25:23.640 回答