如何使用Moxy将json字符串转换为LocalDateTime

时间:2018-11-21 01:16:37

标签: java json jackson jersey moxy

我正在使用Jersey实现REST服务(POST方法),并且请求对象中具有LocalDateTime字段。当我使用邮递员发送json请求时,LocalDateTime字段在请求对象中被设置为null。

我通过设置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();
}

// ContextResolver

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

POM

<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"
}

0 个答案:

没有答案