使用 Jackson 格式化 Java 8 的 LocalDate
Jackson 基于注释的 java.util.Date 格式无缝扩展到 Java 8 中的 LocalDate 字段。为了实现这一点,请避免使用注释,而是将 Jackson 的 ContextResolver 与JavaTimeModule.
ContextResolver:
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import javax.ws.rs.ext.ContextResolver; import javax.ws.rs.ext.Provider; @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; } }
资源类:
import java.time.LocalDate; @Path("person") public class LocalDateResource { @GET @Produces(MediaType.APPLICATION_JSON) public Response getPerson() { Person person = new Person(); person.birthDate = LocalDate.now(); return Response.ok(person).build(); } @POST @Consumes(MediaType.APPLICATION_JSON) public Response createPerson(Person person) { return Response.ok( DateTimeFormatter.ISO_DATE.format(person.birthDate)).build(); } public static class Person { public LocalDate birthDate; } }
测试:
使用这个方法,您应该能够使用 ISO-8601 格式将 LocalDate 值序列化和反序列化为 JSON 字符串。
有关更多信息,请参阅 JSR310 模块文档。
注意:
从 Jackson 版本 2.7 开始,JSR310Module 是已弃用。请改用 JavaTimeModule。
以上是如何在没有注释的情况下使用 Jackson 格式化 Java 8 的 LocalDate?的详细内容。更多信息请关注PHP中文网其他相关文章!