为了账号安全,请及时绑定邮箱和手机立即绑定

使用Jackson JSON映射器序列化/反序列化java 8 java.time

使用Jackson JSON映射器序列化/反序列化java 8 java.time

使用Jackson JSON映射器序列化/反序列化java 8 java.time如何将Jackson JSON映射器与Java 8 LocalDateTime一起使用?org.codehaus.jackson.map.JsonMappingException:无法从JSON String实例化类型[simple type,class java.time.LocalDateTime]的值; 没有单字符串构造函数/工厂方法(通过引用链:MyDTO [“field1”] - > SubDTO [“date”])
查看完整描述

3 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

这里不需要使用自定义序列化器/反序列化器。使用jackson-modules-java8的datetime模块

数据类型模块使Jackson能够识别Java 8 Date&Time API数据类型(JSR-310)。

该模块增加了对很多类的支持:

  • 持续时间

  • 瞬间

  • LocalDateTime

  • LOCALDATE的

  • 当地时间

  • 月日

  • OffsetDateTime

  • OffsetTime

  • YearMonth

  • ZonedDateTime

  • 了zoneid

  • ZoneOffset



查看完整回答
反对 回复 2019-08-06
?
拉莫斯之舞

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


查看完整回答
反对 回复 2019-08-06
?
月关宝盒

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>>() {
            });


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 1563 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信