gpt4 book ai didi

java - 如何不将组合对象包含到 json 中?

转载 作者:行者123 更新时间:2023-11-30 06:14:03 26 4
gpt4 key购买 nike

我有以下类(class):

public class Container{
String description;
Element1 element1;
Element2 element2;
}

public class Element1{
String f11;
String f12;
}

public class Element2{
String f21;
String f22;
}

我将 Container 序列化为 json 格式。对于 json 序列化,我使用 Jackson。

如果 f11f12,现在我不想将 element1element2 包含到 json 中>f21, f22 respectevilly 是空白。

据我所知,我应该编写 cistom 序列化程序,但我不明白是针对哪个实体。 元素 还是 容器?以及如何?

附言

我的问题不是 Ignoring new fields on JSON objects using Jackson 的重复问题

本主题介绍了如何忽略 Container 中的空值。我的问题是如何忽略 Container 中只有空值的对象

最佳答案

StaxMan's answer 启发的另一个想法是实现一个“空元素模块”,封装所有对 Container 中不同元素的 isEmpty 的覆盖。例如,模块可能看起来像这样:

public class EmptyElementModule extends SimpleModule {
private static final String NAME = "EmptyElementModule";

public EmptyElementModule() {
super(NAME);
setSerializerModifier(new EmptyElementSerializerModifier());
}

public static class EmptyElementSerializerModifier extends BeanSerializerModifier {
@Override
public JsonSerializer<?> modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer<?> serializer) {
Class<?> beanClass = beanDesc.getBeanClass();
if (beanClass == Element1.class) {
return new EmptyElement1Serializer((JsonSerializer<Object>) serializer);
} else if (beanClass == Element2.class) {
// return element 2 serializer
}
return serializer;
}
}

public static class EmptyElement1Serializer extends JsonSerializer<Element1> {
private final JsonSerializer<Object> defaultSerializer;

public EmptyElement1Serializer(JsonSerializer<Object> defaultSerializer) {
this.defaultSerializer = checkNotNull(defaultSerializer);
}

@Override
public void serialize(Element1 value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
defaultSerializer.serialize(value, gen, serializers);
}

@Override
public boolean isEmpty(SerializerProvider provider, Element1 value) {
return value.f11 == null && value.f12 == null;
}
}
}

关于java - 如何不将组合对象包含到 json 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31009815/

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