我有一个简单的接口,带有属性的 getter 和 setter。
public interface HasMoney {
Money getMoney();
void setMoney(Money money);
}
我有另一个实现此接口的类 UserAccount。
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 我们打算跟踪这个属性,当 money 属性被发送到服务器并且 Jackson 试图反序列化它并抛出 MalformedJsonException 时,这似乎使应用程序崩溃:不能构造 Money 类型的对象。
最奇怪的是,将@JsonIgnore 放在setter 上并将@JsonProperty 放在setter 上适用于大多数情况下属性是原始的。
原文由 Nishant Nagwani 发布,翻译遵循 CC BY-SA 4.0 许可协议
好的,所以 @JsonIgnore 的行为从 1.9 开始发生了根本性的变化(对于更糟糕的 imo)。无需深入了解为什么您的属性在反序列化过程中未被忽略的细节,请尝试使用以下代码修复它:
请注意在现场使用
@JsonIgnore
- 它是工作解决方案所必需的。注意:根据您的环境和用例,您可能需要在 ObjectMapper 实例上进行额外配置,例如 USE_GETTERS_AS_SETTERS、AUTO_DETECT_GETTERS、AUTO_DETECT_SETTERS _等_。