我有一个类,其中有一个String
字段,但现在我将其更改为List<String>
public TestClass{
// String field; was
List<String> field; // now
}
但问题是我已经在数据库中有一些数据了。我把这个类作为json保存到db中,当我需要检索它的时候,我正在解析它。但是现在它失败了,错误是因为它不能把单个String(以前是这样的)解析成List<String>
(现在是这样的)。我能以某种方式改变这个行为吗?
现在我是这样分析的:
public <T> T parse(String s, Class<T> clazz) { // clazz is TestClass.class, String is json from DB
try {
return objectMapper.readValue(s, clazz); // objectMapper is ObjectMapper
} catch (JsonProcessingException e) {
...
}
}
但是很明显,我的数据库中有两种类型的字段(旧的和新的),我能以某种方式将一个字符串解析为列表,但它也应该将列表解析为列表吗?
2条答案
按热度按时间guicsvcw1#
最简单的方法可能是使用如下注解对
TestClass
中的字段field
进行注解:或者,如果无法将注解添加到字段中,则可以在对象Map器上启用它,方法是:
0x6upsns2#
修改数据模型时解决此问题的正确方法是创建一个SQL脚本,将数据库中的所有现有值转换为新模型。
我知道支持同一个字段的两个版本是非常糟糕的做法。想象得更远一点。下次当你改变这个字段时,你会怎么做?
P.S.如果您仍然希望按自己的方式进行操作,则必须创建自定义反序列化器。请参阅此主题:Baeldung - Deserialization in Jackson 的最大值