java - 如何将具有日期类型字段的 JSON 反序列化为 POJO。

标签 java date jackson deserialization pojo

我正在使用 Jersey+Jackson 开发 REST API。

我想转换 JSON --> POJO。

我的Pojo类有一个名为'created'日期字段

在字符串'jsonUser'中,我有我的Pojo的json表示。

现在,当我使用以下代码将 JSON 表示转换为 Pojo 对象时:

ObjectMapper mapper = new ObjectMapper();       
Pojo oldUser = mapper.readValue(jsonUser, Pojo.class);

我收到以下错误:

Exception: Can not construct instance of java.sql.Timestamp from String value '2013-07-29 11:41:00.0': not a valid representation 

Jackson 无法将String 表示形式反序列化Date 对象。

我如何配置 Jackson 来做到这一点?

最佳答案

问题可能出在日期转换上。 只需按照以下方式进行即可:

public class Pojo
{
private String created;
private Date createdDate;

//getter methods. 

//setter methods
public void setCreated(String created)
{
  this.created = created;
  //Logic for converting MySQL-String representation to desired
}

//mapper config
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.setSerializationInclusion(Include.NON_NULL);
mapper.setSerializationInclusion(Include.NON_EMPTY);
mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true );
}

Pojo oldUser = mapper.readValue(jsonUser, Pojo.class);
  • 创建一个映射器,它可以避免值不存在时出现异常。
  • 使用 created 作为 String 字段和 createdDate 创建 POJO 日期字段。
  • 在“created”的 setter 中,编写用于将字符串转换为日期的逻辑。
  • JSON 将通过调用 created 上的 setter 方法正确地将 String 分配给 POJO。
  • 在 setter 中,字符串-日期转换 逻辑将处理 createdDate 字段。

希望有帮助。

关于java - 如何将具有日期类型字段的 JSON 反序列化为 POJO。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17918174/

相关文章:

Java:从同一个 JAR 启动两个不同的应用程序?

java - 从 CST 到 GMT 的日期格式转换不起作用

php - 为什么PC和笔记本电脑的代码结果不同

PHPInfo 日期错误

java - Spring Boot Jackson Databind - 配置继承

java - 按yearWeek或week分组时出现IllegalStateException

java - 如何使用 org.scribe.oauth 连接到 tumblr API?

java - Spring DateTime Conversion服务异常

java - 从 JSON 中的变量类型进行 Jackson 反序列化

java - Jackson 反序列化器不会因未知属性或缺失值而失败