【发布时间】:2018-05-08 17:39:18
【问题描述】:
我正在与 Jackson 合作,我编写了以下自定义序列化程序:
public class FooSerializer extends StdSerializer<List<Foo>> {
public FooSerializer() {
this(null);
}
public FooSerializer(Class<List<Foo>> t) {
super(t);
}
public void serialize(List<Foo> foos, JsonGenerator gen, SerializerProvider provider) throws IOException {
gen.writeStartArray(foos.size());
for(Foo foo : foos){
gen.writeString(foo.getName());
}
gen.writeEndArray();
}
}
我已经在ObjectMapper注册了如下:
SimpleModule fooModule = new SimpleModule("Foo Module");
fooModule.addSerializer(new FooSerializer((Class<List<Foo>>)(Object)List.class));
objectMapper.registerModule(fooModule);
我希望它获取一个持有List 的Foos 的对象并像返回它一样
{
...
"foos":["name1", "name2"]
...
}
这工作正常,但是,当我传递 SomeObjectHoldingFoos 的 List 时,每个都持有 Foo 的 List,ObjectMapper 尝试将 FooSerializer 应用到这个 List 已经,导致Foo cannot be cast to SomeObjectHoldingFoos 异常。
我怀疑 FooSerializer 的 handledType 不知何故被设置为 List 而不是 List<Foo> 但我不知道如何解决这个问题,因为似乎没有参数化的类输入。
我能做什么?
【问题讨论】:
-
刚刚通过代码我想知道 List.class 是否可以在 addSerializer 部分中替换为 List
.class
标签: json list serialization jackson objectmapper