【问题标题】:Spring+Jackson: How to set visibility of a class without using @JsonAutoDetect annotationSpring+Jackson:如何在不使用 @JsonAutoDetect 注释的情况下设置类的可见性
【发布时间】:2017-01-11 18:49:40
【问题描述】:

在我的 spring-boot 应用程序中,我在 Jackson 的 ObjectMapper 上有一个全局配置,它告诉 Jackson 不要按字段序列化对象,而是按 getter:

@Bean
public Jackson2ObjectMapperBuilder objectMapperBuilder()
{
    return new Jackson2ObjectMapperBuilder()
    {

        @Override
        public void configure(ObjectMapper objectMapper)
        { 
            super.configure(objectMapper);
            objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
            objectMapper.setVisibility(PropertyAccessor.FIELD, Visibility.NONE);
            objectMapper.setVisibility(PropertyAccessor.GETTER, Visibility.PUBLIC_ONLY);
            objectMapper.setVisibility(PropertyAccessor.IS_GETTER, Visibility.PUBLIC_ONLY);

        }

    };
}

但是,现在我正在处理一个特殊情况。我需要序列化一个不是我自己编写的类(类形式的依赖库)。由于该类没有声明 getter,Jackson 将忽略这些字段。 下面是外部类的样子:

public class DirectionsResult 
{
  public GeocodedWaypoint geocodedWaypoints[];
  public DirectionsRoute routes[];
}

虽然使用@JsonAutoDetect 注释可以定制类对Jackson 的可见性,但这不适用于外部类。 那么如何在不使用 @JsonAutoDetect 注释并且不更改全局配置的情况下设置类的可见性?

【问题讨论】:

    标签: java json spring spring-boot jackson


    【解决方案1】:

    您应该可以使用 jacksons MixIn 功能。使用这种方法,您可以通过您选择的另一个类定义来控制一个类的所有配置。

    https://github.com/FasterXML/jackson-docs/wiki/JacksonMixInAnnotations

    您还可以查看我的一个 github 项目以了解该功能的使用情况:

    https://github.com/Antibrumm/jackson-antpathfilter

    【讨论】:

    • 感谢@Martin Frey,Jackson MixIn 是解决方案。但请注意 SerializationConfig 的实例方法 addMixInAnnotations 已被弃用(并已删除),因此我们必须通过注册 JacksonFeatureModules 来设置 MixIn。
    • 是的,我的项目中也有提示。也谢谢你的提及。一旦我找到一些时间,我会更新项目。很高兴我能帮上忙。
    猜你喜欢
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多