定制的方式让我们想象一下,我有以下POJO:(去)序列化豆在运行时
class Pojo {
String s;
Object o;
Map<String, String> m;
}
并在运行时,我想,除了为一个所有属性默认序列化/反序列化。通常,我想在序列化时用数据库中的ID替换字段,类似于this other question。
例如,我想通过从外部映射而获得的字符串来替换o
(例如:object1
< => “123” 和object2
< => “456”):
- 序列:读
o
和替换(所以如果o
是object1
,序列化为字符串“123”) - 反序列化:读“123”,查询一些表来获得
o
原始值回(即object1
),重新建立一个Pojo
objec t与o = object1
。
我明白,模块将是一种方法来做到这一点,但我不知道如何使用它们,同时保持自动BeanSerializer/Deserializer的属性,不需要改变。
有人可以举一个例子(甚至设计)或另一种方法?
注:
- 我不能使用注释或混入作为变化是在编译时未知(即任何属性可能的方式是不确定的改变)。
- This other question指向使用CustomSerializerFactory,这似乎做了这项工作。不幸的是,官方网站表明应该使用it is not the recommended approach any more和那个模块。
编辑
为了更清晰一点,我可以做混入下面的例子:
ObjectMapper mapper = new ObjectMapper(MongoBsonFactory.createFactory());
mapper.addMixInAnnotations(Pojo.class, PojoMixIn.class);
ObjectReader reader = mapper.reader(Pojo.class);
DBEncoder dbEncoder = DefaultDBEncoder.FACTORY.create();
OutputBuffer buffer = new BasicOutputBuffer();
dbEncoder.writeObject(buffer, o);
具有以下的Mixin:
abstract class PojoMixIn {
@JsonIgnore Object o;
}
然后添加JSON内容所需的字符串。但在编译时我需要知道它是o
字段需要被替换,我不这样做。
>我不能使用注释或混入作为变化是在编译时未知(即任何属性可能>的方式改变这是不可确定的)。你能澄清一下吗?非常困惑,因为“注释:”上面的所有内容都是静态的,并且在编译时已知。班级(Pojo)和Pojo领域事先不知道? – 2013-02-26 11:10:59
您是否建议假设任何班级结构并不安全? Raw(无类型/简单)数据绑定将对象JSON结构反序列化为LinkedHashMap和数组JSON结构作为ArrayList
@GlenBest是的,Pojo类可以是或多或少的东西。我举了一个例子,其中'o'被一个String替换。但后来在程序中,它可能是'm',它需要被一些字符串替代,而'o'通常被“序列化”。 – assylias 2013-02-26 15:59:38