告诉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方法?
答案 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);