java - 如何使用 Moxy 将 json 字符串转换为 LocalDateTime
问题描述
我正在使用球衣实现 REST 服务(POST 方法),并且我在请求对象中有 LocalDateTime 字段。当我使用邮递员发送 json 请求时,请求对象中的 LocalDateTime 字段被设置为空。
我通过设置 LocalDateTime 值并在响应中发送它来测试序列化。它工作正常。
下面是我的代码 pom.xml 示例请求和响应。有人可以帮忙解决这个问题吗?
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
public class Request {
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime startDateTime;
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime endDateTime;
private String id;
}
//REST API
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response test(Request request) {
request.setStartDateTime(LocalDateTime.now());
return Response.ok().entity(request).build();
}
//上下文解析器
@Provider
public class ObjectMapperContextResolver implements ContextResolver<ObjectMapper> {
private final ObjectMapper MAPPER;
public ObjectMapperContextResolver() {
MAPPER = new ObjectMapper();
MAPPER.registerModule(new JavaTimeModule());
MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
}
@Override
public ObjectMapper getContext(Class<?> type) {
return MAPPER;
}
}
聚甲醛
<jersey.version>2.22.2</jersey.version>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-common</artifactId>
<version>2.25.1</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.25.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.9.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.9.7</version>
</dependency>
</dependencies>
要求
{
"startDateTime" : "2011-01-01T00:00:30.000",
"endDateTime" : "2011-12-12T00:00:33.000",
"id" : "testString"
}
回复
{
"startDateTime" : "2018-11-21T11:50:58.560", //this is the value I am setting before sending response
"id" : "testString"
}
解决方案
推荐阅读
- python - 创建一个空列表,在函数中添加点,但尝试回调时出错
- compilation - 寄存器分配器实际上是如何工作的?
- javascript - ReferenceError: soundFormats 未定义
- leaflet - Leaflet Draw 图标不会出现在 Vue 的生产模式中
- forms - 隐式提交(按回车键提交)对使用阅读器和键盘导航的人有用吗?
- java - JavaFx append 方法中的未知 NullPointerException
- python - 用于获取逻辑回归的最大似然估计的 Python 包
- json - 在 JQ 中从外部文件中查找 ID
- php - Wordpress:插入带有当前完整路径的附件,而不是位于 wordpress 上传目录中的图像
- powerbi - Power BI:需要前导零的 SUMMARIZE 表