首页 > 解决方案 > 如何使用 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"
}

标签: javajsonjacksonjerseymoxy

解决方案


推荐阅读