Spring + Jackson:如何在不使用@JsonAutoDetect注释的情况下设置类的可见性

时间:2016-09-04 02:15:30

标签: java json spring spring-boot jackson

在我的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);

        }

    };
}

然而,现在我正在处理一个特例。我需要序列化一个不是我自己编写的类(一个类表单依赖库)。由于班级没有宣布吸气剂,杰克逊将忽略这些领域。 以下是外部类的外观:

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

尽管使用@JsonAutoDetect注释可以自定义类对Jackson的可见性,但这不适用于外部类。 那么如何在不使用@JsonAutoDetect注释的情况下设置类的可见性,以及不更改全局配置

1 个答案:

答案 0 :(得分:1)

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

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

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

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