jackson 根据值的枚举类型从HashMap中删除条目

jm2pwxwz  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(117)

我需要从一个对象创建一个json。该对象包含一个Name类型的List成员变量。Name是一个包含枚举NameType的类。下面是该类:

public final class Person { private final List<Name> names; }

public class Name {

    private final String first;

    private final String last;

    private final String middle;

    private final NameType type;
}
public enum NameType {
    X,
    Y,
    Z
}

为类Person生成的json不应该包含NameType为Y和Z的Name。下面是我尝试生成json的简单方法:

Map<String, Object> personMap = mapper.readValue(person!=null ? mapper.writeValueAsString(person) : "{}", typeReference);

我需要从personMap中删除键“names”。我已经搜索了几种在序列化之前删除它的方法,但这些方法对我不起作用。我遵循了以下教程:https://www.baeldung.com/jackson-ignore-properties-on-serialization,并尝试使用type和filter移除它,但因为这是一个枚举,所以对我不起作用。因此,我有两个问题:
1.是否有办法不将Name属性包含在基于NameType的序列化中。
1.如果在序列化完成后有任何方法可以移除。下面是为map.

生成的结构
提前感谢!!

elcex8rz

elcex8rz1#

  • 免责声明:我以前从来没有用过Jackson,这是我第一次接触。我只是在喝早茶的时候寻找一个小难题来解决,这也能让我学到一些东西。所以我不确定是否有更好或更优雅的方法来解决这个问题。*

为了提供一个每个人都可以轻松编译和执行的MCVE,下面是我的示例类的更完整版本(包括getter):
第一个
如本教程中类似案例所述,我们可以将自定义JsonSerializer<Name>BeanSerializerModifier结合使用,将它们注册到SimpleModule中的ObjectMapper上:
第一个
控制台日志应为:

false
false
true
true
{"names":[{"first":"Emanuel","last":"Goldenberg","type":"REAL"},{"first":"Эмануэль","last":"Голденберг","type":"REAL"}]}

哦,顺便说一句,以防不是每个人都知道Edward G. Robinson是谁...

相关问题