这里有一个resteasy rest API的示例。
xml的一部分:
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-grizzly2-http</artifactId>
</dependency>
<!-- Jersey DI and core-->
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.hk2</groupId>
<artifactId>hk2-metadata-generator</artifactId>
<version>3.0.3</version>
</dependency>
<!-- add jackson as json provider -->
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<version>2.3.10.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-client</artifactId>
<version>3.9.3.Final</version>
</dependency>
</dependencies>
我的资源类的一部分:
@Path("/test")
@GET
@Produces("application/json")
@Consumes("application/json")
public Date test() {
return new Date();
}
所以当我请求http://localhost:8080/test
时,响应是1685343320152
而不是日期格式。
哪里错了?
1条答案
按热度按时间myss37ts1#
我可以回答你的部分问题,解释为什么响应是
1685343320152
。默认为从epoch开始计数
显然,Jackson默认将
java.util.Date
对象序列化为自UTC(1970-01- 01 T00:00 Z)中所见的1970年第一时刻的历元引用以来的毫秒计数。ISO 8601
最好序列化为ISO 8601。使用
ObjectMapper
将默认格式更改为ISO 8601。参见baeldung的Jackson Date。
java.time
您正在使用有严重缺陷的日期-时间类,这些类在几年前就被JSR 310中定义的现代 java.time 类所取代。
具体地,
java.util.Date
被Instant
替换。两者都表示一个时刻,与UTC的偏移量为零小时-分钟-秒,但分辨率分别为毫秒和纳秒。我强烈建议您考虑使用现代类来取代传统类。