文章目录
  1. 1. 问题
  2. 2. 原因
  3. 3. 解决

问题

当使用Jackson进行json数据转换时,如果目标字段类型为TimeStamp并且要转换的值为空字串时会报空指针错误。

原因

下面是Timestamp反序列化器的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static class TimestampDeserializer extends DateBasedDeserializer<Timestamp>
{
public TimestampDeserializer() { super(Timestamp.class); }
public TimestampDeserializer(TimestampDeserializer src, DateFormat df, String formatString) {
super(src, df, formatString);
}
@Override
protected TimestampDeserializer withDateFormat(DateFormat df, String formatString) {
return new TimestampDeserializer(this, df, formatString);
}
@Override
public java.sql.Timestamp deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException
{
return new Timestamp(_parseDate(jp, ctxt).getTime());
}
}

通过_parseDate方法转换为Date后,并没有判断是否转换成功而直接调用了getTime方法。

解决

添加一个自定义的TimeStamp的Deserializer,然后通过SimpleModule来注册到ObjectMapper中。

文章目录
  1. 1. 问题
  2. 2. 原因
  3. 3. 解决
Fork me on GitHub