我有一个简单的接口(interface),其中包含属性的 getter 和 setter。
public interface HasMoney {
Money getMoney();
void setMoney(Money money);
}
我有另一个类 UserAccount 实现了这个接口(interface)。
public class UserAccount implements HasMoney {
private Money money;
@Override
Money getMoney() // fill in the blanks
@Override
void setMoney(Money money) // fill in the blanks
}
我的问题是我想序列化 money 属性,但在反序列化时忽略它,即不接受用户为这个属性提供的任何值。我已经在 setter 上尝试了 @JsonIgnore ,在 getter 上尝试了 @JsonIgnore(false) ,它确实忽略了它,但它在序列化它的同时也这样做了。
我在 setter 上尝试了@JsonIgnore,在 getter 上尝试了@JsonProperty,只是为了明确告诉 Jackson 我们打算跟踪这个属性,当金钱属性发送到服务器并且 Jackson 试图反序列化它抛出时,这似乎会使应用程序崩溃up MalformedJsonException : 无法构造 Money 类型的对象。
最奇怪的是,将@JsonIgnore 放在setter 上,将@JsonProperty 放在setter 上适用于大多数情况下的原始属性。
最佳答案
版本 2.6.0+ 允许在类级别使用 @JsonIgnoreProperties 完成此操作。
@JsonIgnoreProperties(value={ "money" }, allowGetters=true)
看看这个已关闭的问题: https://github.com/FasterXML/jackson-databind/issues/95
https://stackoverflow.com/questions/16019834/