1

告诉杰克逊不要序列化特定的 getter 方法的最简单方法是什么?我只想对一个 getter 说明确,因为我有一个自定义的复杂类,所有 setter 和 getter 都应该起作用,只有一个不应该:

mapper.configure(SerializationConfig.Feature.AUTO_DETECT_GETTERS, true);

所以这不是正确的方法。我需要告诉我我不想在这个类中使用 getter:

public static class EventRow implements Serializable, Cloneable, GRSerializable {
    public int x
    public int y
    public double z
    public String eventKeyValuesPacked; 

    //This getter should not be used, because there is no explicit setter
    //for    this, and also no public... And it is only unpack  
    //EventKeyValuesPacked so it would be multiple data...
    public KeyValue[] getEventKeyValues() {
       KeyValue[] kvs = DA_EventKey.unpackKeyValues(eventKeyValuesPacked);
       return kvs == null ? new KeyValue[0] : kvs;
   }
}

是否有任何注释或SerializationConfig选项可以使getEventKeyValues()getter 方法不可见?

4

5 回答 5

2

告诉杰克逊不要序列化特定的 getter 方法的最简单方法是什么......没有注释?

无需编写客户序列化程序...

如果不希望直接注释要跳过的字段/属性/getter/setter,另一种方法是利用Jackson Mix-In 功能

另一种仅用于序列化的方法是利用Jackson JSON Views 功能,尽管这也需要某种能力的注释。

于 2012-07-04T19:23:22.270 回答
1

对此有一个注释:@JsonIgnore

@JsonIgnore
public KeyValue[] getEventKeyValues() {
...

如果您不想为此使用注释,则需要编写自定义序列化程序。

于 2012-07-04T15:07:30.290 回答
0

objectMapper.configure(SerializationConfig.Feature.AUTO_DETECT_GETTERS, false);

于 2012-09-13T16:18:42.260 回答
0

我认为这几乎可以做到:

objectMapper.configure(DeserializationConfig.FAIL_ON_UNKNOWN_PROPERTIES, false);

于 2012-07-04T15:18:30.803 回答
0

这可能取决于 Jackson 版本——在 1.9 之前,getter 和 setter 是分开处理的,因此自动检测 getter 就足够了。但是在 1.9 及更高版本中,setter/getter/field 都组合成逻辑属性,这可以让 Jackson 从 setter 中推断出属性的存在。

因此,您可能还需要禁用 setter 检测。已经给出的其他选项也可以使用,混合注释是执行此操作的常用方法。

于 2012-07-05T17:35:14.790 回答