我有一个简单的接口,带有getter和setter属性.
public interface HasMoney {
Money getMoney();
void setMoney(Money money);
}
Run Code Online (Sandbox Code Playgroud)
我有另一个类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
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我想序列化money属性但在反序列化时忽略它,即不接受用户对此属性的任何值.我在setter上尝试了@JsonIgnore,在getter上尝试了@JsonIgnore(false),它确实忽略了它,但它也是在序列化时也是如此.
我在setter上尝试了@JsonIgnore,在getter上尝试了@JsonProperty,只是为了明确告诉Jackson我们打算跟踪这个属性,当money属性被发送到服务器并且Jackson试图反序化它抛出MalformedJsonException时,这似乎会崩溃应用程序:不能构造Money类型的对象.
最奇怪的是,当属性是原始的时,将@JsonIgnore放在setter上并且setter上的@JsonProperty适用于大多数情况.
我有一个班级家长
public class Parent
{
private int id;
@JsonIgnore
int getId() {}
void setId(int id) {}
}
Run Code Online (Sandbox Code Playgroud)
我有一个派生自Parent的子类
public class Child extends Parent
{
@JsonProperty // just to explicitly tell jackson to serialize this
@Override
int getId() {}
@Override
void setId(int id) {}
}
Run Code Online (Sandbox Code Playgroud)
我实际上不希望在返回Parent对象时序列化id属性,但是当返回Child类的对象时应该序列化它.
我认为如果Parent是一个接口,覆盖可见性会起作用,但我不确定行为是否与超类相同.
有一个简单的解决方案吗?我真的很感激你的答案.TX.