JSON-B将日期字符串反序列化为joda DateTime,而无需更改模型类

时间:2019-02-23 18:51:09

标签: java json jackson deserialization jsonb

我正在将JSON日期字段反序列化为外部模型类。该请求看起来像:

{
  "name": "Bob",
  "lastName":"Bobertson",
  "date": "2019-03-12"
}

这是我用来反序列化的代码。请注意,有问题的类是外部的,但与传入的请求匹配。

import javax.json.bind.Jsonb;

private static Jsonb jsonb = JsonbBuilder.create();

public static External deserExternal(String jsonRQ) {
    return jsonb.fromJson(jsonRQ, External.class);
}

像下面这样调用此方法会导致

  

javax.json.bind.JsonbException:将JSON值反序列化为类型时出错:类org.joda.time.LocalDate

String jsonRQ= readFile("./path/to/file.json");
External externalRQ = deserExternal(jsonRQ);

到目前为止,我发现的所有解决方案都涉及注释模型以说明joda类型,但我没有这种选择。如何仅通过编辑反序列化器来实现此目的,最好是允许它根据需要将日期字符串自动转换为joda DateTime?

1 个答案:

答案 0 :(得分:1)

我通过JACKSON知道,您可以使用类似

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
mapper.readValue(jsonRQ, External.class);

Maven依赖项:

<dependency>
  <groupId>com.fasterxml.jackson.datatype</groupId>
  <artifactId>jackson-datatype-joda</artifactId>
  <version>2.1.1</version>
</dependency> 

不确定是否可以切换库