首页 >Java >java教程 >如何将 Jackson 配置为仅使用字段进行序列化和反序列化?

如何将 Jackson 配置为仅使用字段进行序列化和反序列化?

DDD
DDD原创
2024-12-14 03:53:09313浏览

How Can I Configure Jackson to Use Only Fields for Serialization and Deserialization?

将 Jackson 配置为仅使用字段进行序列化和反序列化

Jackson 的默认行为涉及使用属性(getter 和 setter)和字段进行序列化并反序列化为 JSON。但是,某些用户可能更喜欢将字段优先级作为序列化配置的唯一来源,不包括属性。

针对单个类的基于注释的方法

强制执行此行为在每个类的基础上,可以使用 @JsonAutoDetect 注释:

@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE)

此注释排除以下属性: Jackson的考虑,确保只有字段用于数据绑定。

所有类的全局配置

不用手动将注解应用到每个类,可以为所有类全局配置此行为。为此,需要对 ObjectMapper 进行如下修改:

ObjectMapper mapper  = new ObjectMapper();
mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));

此配置会覆盖默认可见性设置,并指示 Jackson 仅使用字段来跨所有类进行序列化和反序列化。

全局访问配置的Mapper

对于全局访问配置的ObjectMapper,可以使用包装类:

public class MyGlobalMapper {
    private static final ObjectMapper MAPPER = new ObjectMapper();

    static {
        MAPPER.setVisibility(MAPPER.getSerializationConfig().getDefaultVisibilityChecker()
                .withFieldVisibility(JsonAutoDetect.Visibility.ANY)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
    }

    public static ObjectMapper get() {
        return MAPPER;
    }
}

这个包装类提供了一个静态方法来检索配置的 ObjectMapper,允许它在整个应用程序中使用,而无需每次都重新配置。

以上是如何将 Jackson 配置为仅使用字段进行序列化和反序列化?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn