【问题标题】:Ignoring a field without modifying the POJO class with Jackson忽略一个字段而不用杰克逊修改 POJO 类
【发布时间】:2017-02-08 22:31:16
【问题描述】:

我的 POJO 类在字段声明中使用 @JsonIgnore,而不是在 getter 和 setter 方法上。这是一个生成的文件,我无法对其进行太多更改。

在使用JsonGenerator.Setting 编写时如何忽略该字段?在 getter 和 setter 上使用 @JsonIgnore 有效。但是不能修改生成的POJO类。

【问题讨论】:

  • 在生成类后将该属性设置为 null。
  • 这些值是从数据库中设置的。我只想使用 JsonGenerator 忽略这些字段。即,即使它们有值,我也想忽略它们。
  • 您是要生成对象列表还是单个对象?
  • 你试过我在my answer中提到的方法吗?请告诉我它是否有效?
  • 你的意思是你的班级有10个变量,提供的数据可能不包含10个变量。在这种情况下,在类的顶部给出@JsonIgnoreProperties(ignoreUnknown = true)。

标签: java json jackson


【解决方案1】:

将 Jackson 配置为仅使用字段注释

在字段上放置注解后,您可以将ObjectMapper 配置为仅使用字段注解,忽略getter 和setter 方法的注解:

ObjectMapper mapper = new ObjectMapper();    
mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

Jackson 混合注释

当您无法修改 POJO 时,这是一个很好的选择。您可以将其视为一种在运行时添加更多注释的面向方面的方式,以增加静态定义的注释。

定义一个混合注释接口(类也可以):

public interface FooMixIn {

    @JsonIgnore
    String getBar();
}

然后配置ObjectMapper 使用定义的接口(或类)作为你的POJO的混合:

ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT)
                                        .addMixIn(Foo.class, FooMixIn.class); 

以下是一些使用注意事项:

  • 可以混入 Jackson 识别的所有注释集。
  • 可以混入各种注解(成员方法、静态方法、字段、构造函数注解)。
  • 只有方法(和字段)名称和签名用于匹配注释:访问定义(privateprotected、...)和方法实现被忽略。

更多详情,请查看page

【讨论】:

    【解决方案2】:

    将这些字段定义为transients,避免它们被序列化 无论你使用什么注解的 json...

    【讨论】:

    • 不能修改生成的类。
    猜你喜欢
    • 2015-03-20
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 2016-04-19
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多