gpt4 book ai didi

java - 使用 Jackson 将默认序列化器应用于自定义序列化器中的属性

转载 作者:太空宇宙 更新时间:2023-11-04 13:46:50 24 4
gpt4 key购买 nike

我有一个需要序列化的对象,但我遇到了一些困难。我需要一个自定义序列化程序来以不同的方式序列化无效对象和有效对象。因此,我编写了一个自定义序列化器,如下所示:

public class MySerializer extends JsonSerializer<MyObject> {

@Override
public void serialize(MyObject obj, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
if(obj.isValid()){
jgen.writeObject(obj.getInvalids());
}
else{
jgen.writeObject(obj);
}
jgen.writeEndObject();
}
}

现在,当我尝试序列化时,如果无限递归,我会收到错误(原因非常清楚)。所以我想知道是否可以做到这一点而无需将代码更改为:

public class MySerializer extends JsonSerializer<MyObject> {

@Override
public void serialize(MyObject obj, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
if(obj.isValid()){
jgen.writeObject(obj.getInvalids());
}
else{
jgen.writeObjectField("prop1", obj.getProp1());
jgen.writeObjectField("prop2", obj.getProp2());
...
}
jgen.writeEndObject();
}
}

有没有一种更干净的方式(并且不那么烦人)来完成我想做的事情?我见过this answer to a similar question, but it is quite terse and I was unable to divine a clear solution from it.

最佳答案

访问“默认”序列化器(如果您没有提供自定义序列化器,Jackson 将构建的序列化器)的方法是注册一个 BeanSerializerModifier(使用 SimpleModule 来注册它),然后重写 modifySerializer()。它被赋予了默认的序列化器,然后您可以构建自己的序列化器,然后可以根据需要进行委托(delegate)。

关于java - 使用 Jackson 将默认序列化器应用于自定义序列化器中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30740039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com