杰克逊反序列化特定吸气剂关闭

时间:2012-07-04 15:04:15

标签: java json jackson deserialization

告诉Jackson没有序列化特定的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方法?

5 个答案:

答案 0 :(得分:2)

  

告诉Jackson没有序列化特定的getter方法的最简单方法是什么   ...   没有注释?

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

如果不希望直接注释要跳过的字段/ property / getter / setter,另一种方法是使用the Jackson Mix-In feature

序列化的另一种方法只是使用the Jackson JSON Views feature,尽管这也需要某种能力的注释。

答案 1 :(得分:1)

有一个注释:@JsonIgnore

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

如果你不想为此使用注释,那么你需要写一个custom serializer

答案 2 :(得分:0)

我认为这几乎可以做到:

  

objectMapper.configure(DeserializationConfig.FAIL_ON_UNKNOWN_PROPERTIES,   假);

答案 3 :(得分:0)

这可能取决于杰克逊版本 - 在1.9之前,吸气剂和制定者是分开处理的,所以不自动检测吸气剂就足够了。但是在1.9及更高版本中,setter / getter / field都被合并到逻辑属性中,这可能允许Jackson从setter中推断出属性的存在。

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

答案 4 :(得分:0)

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