【问题标题】:LocalDateTime parsing with jackson使用杰克逊的 LocalDateTime 解析
【发布时间】:2020-10-16 00:01:51
【问题描述】:

我在将 JSON 映射到具有 LocalDateTime 的 DTO 时遇到问题。

我关注了这个帖子: JSON parse error: Can not construct instance of java.time.LocalDate: no String-argument constructor/factory method to deserialize from String value

添加到 build.gradle

implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0'

这是我的 DTO 中的变量:

@Data
public class MyDto {
    private Long teamId;

    private Map<String, List<Long>> details;

    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime dateOccurred;

}

并添加了这个

public class MyApplication {
    @Autowired
    private ObjectMapper objectMapper;

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

    @PostConstruct
    public void setUp() {
        objectMapper.registerModule(new JavaTimeModule());
    }
}

我错过了什么吗?我收到此错误

org.springframework.messaging.converter.MessageConversionException: Could not read JSON: Cannot construct instance of `java.time.LocalDateTime` (no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value ('2020-06-16 11:12:46')

谢谢!

【问题讨论】:

  • 在这里查看答案:stackoverflow.com/a/29959842/3415090 这更多地与弹簧启动有关,但我认为添加提到的额外杰克逊依赖项可能会解决您的问题。
  • 分享LocalDateTime所属的整个bean。
  • @GoviS 更新了帖子
  • @mohammedkhan 我试过了,但还是一样。 :(
  • @mohammedkhan 嗨,谢谢!现在可以了!我错误地添加了LocalDateDeerializer 而不是LocalDateTimeDeserializer。非常感谢!

标签: java json spring jackson


【解决方案1】:

感谢@mohammedkhan 的指导!

在这个答案中: JSON Java 8 LocalDateTime format in Spring Boot

spring-boot中已经有设置了,不用@AutowireObjectMapper

为 Json Deserializer 添加这个注解

@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime dateOccurred;

谢谢!

【讨论】:

  • serialization 属性对您正在执行的 反序列化 没有帮助。同样LocalDateTimeDeserializer 已经负责反序列化LocalDateTime,假设您正确注册了JavaTimeModule(您可以在其构造函数实现中看到)。这里不需要它(除非你的代码中有一些东西你没有向我们展示)。
  • @SotiriosDelimanolis 嗨,先生。我不确定是否还有别的东西。这些是我所做的唯一更改并且它正在运行。这是我正在检查的答案的链接。 blog.chris-ritchie.com/2014/09/…
  • 如果您有任何其他见解,请告诉我 :)
  • 那篇 2014 年的博文展示了如果您不注册 JavaTimeModule 会做什么。根据您问题中的代码,您是,所以不需要。
  • @SotiriosDelimanolis stackoverflow.com/questions/51527794/… 我已经尝试了另一个。这两种方法,但它仍然不起作用:(
猜你喜欢
  • 2014-08-22
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
相关资源
最近更新 更多