关闭Jackson验证特定的获取程序

7gcisfzg  于 11个月前  发布在  其他
关注(0)|答案(5)|浏览(135)

告诉Jackson不要序列化特定的getter方法的最简单的方法是什么?我只想对一个getter说explicit,因为我有一个自定义的复杂类,所有的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方法不可见?

eaf3rand

eaf3rand1#

告诉Jackson不要序列化一个特定的getter方法.没有注解的最简单的方法是什么?
如果不编写客户序列化程序...
如果不希望直接注解要跳过的字段/属性/getter/setter,另一种方法是使用the Jackson Mix-In feature
另一种仅用于序列化的方法是使用the Jackson JSON Views feature,尽管这在某种程度上也需要注解。

c6ubokkw

c6ubokkw2#

这里有一个注解:@JsonIgnore

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

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

fhg3lkii

fhg3lkii3#

这可能取决于Jackson的版本--在1.9之前,getter和setter是分开处理的,所以没有自动检测getter就足够了。但是在1.9和更高版本中,setter/getter/field都被合并到逻辑属性中,这可能允许Jackson从setter推断属性的存在。
所以你可能需要做的是禁用setter检测。其他已经给出的选项也可以工作,混合注解是一种常见的方法。

5cg8jx4n

5cg8jx4n4#

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

字符串

ttisahbt

ttisahbt5#

我想这几乎做到了:

objectMapper.configure(DeserializationConfig.FAIL_ON_UNKNOWN_PROPERTIES, false);

字符串

相关问题