3 回答
TA贡献1895条经验 获得超3个赞
这里不需要使用自定义序列化器/反序列化器。使用jackson-modules-java8的datetime模块:
数据类型模块使Jackson能够识别Java 8 Date&Time API数据类型(JSR-310)。
持续时间
瞬间
LocalDateTime
LOCALDATE的
当地时间
月日
OffsetDateTime
OffsetTime
期
年
YearMonth
ZonedDateTime
了zoneid
ZoneOffset
TA贡献1820条经验 获得超10个赞
由于历史原因留下这个答案,但我不推荐它。请参阅上面接受的答案。
告诉Jackson使用您的自定义[de]序列化类进行映射:
@JsonSerialize(using = LocalDateTimeSerializer.class)@JsonDeserialize(using = LocalDateTimeDeserializer.class)private LocalDateTime ignoreUntil;
提供自定义类:
public class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> { @Override public void serialize(LocalDateTime arg0, JsonGenerator arg1, SerializerProvider arg2) throws IOException { arg1.writeString(arg0.toString()); }}public class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> { @Override public LocalDateTime deserialize(JsonParser arg0, DeserializationContext arg1) throws IOException { return LocalDateTime.parse(arg0.getText()); }}
随机事实:如果我在类之上嵌套并且不使它们静态,则错误消息很奇怪: org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported
TA贡献1772条经验 获得超5个赞
如果您使用的是fastxml的ObjectMapper类,默认情况下ObjectMapper不了解LocalDateTime类,因此,您需要在gradle / maven中添加另一个依赖项:
compile 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.7.3'
现在您需要将此库提供的数据类型支持注册到objectmapper对象,这可以通过以下方式完成:
ObjectMapper objectMapper = new ObjectMapper();objectMapper.findAndRegisterModules();
现在,在您的jsonString中,您可以轻松地将java.LocalDateTime字段设置如下:
{ "user_id": 1, "score": 9, "date_time": "2016-05-28T17:39:44.937"}
通过这一切,您的Json文件到Java对象转换将正常工作,您可以通过以下方式读取该文件:
objectMapper.readValue(jsonString, new TypeReference<List<User>>() { });
添加回答
举报