我有一个与属性的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
}
我的问题是,我想要序列金钱财产,但反序列化它即不从用户此属性接受任何值忽略。我已经在setter和@JsonIgnore(false)上尝试了@JsonIgnore,但它确实忽略了它,但它在序列化时也是如此。
我试着在setter上使用@JsonIgnore和在getter上使用@JsonProperty来明确告诉Jackson我们打算跟踪这个属性,当Money属性被发送到服务器时,似乎会崩溃应用程序,Jackson试图反序列化它抛出MalformedJsonException:不能构造Money类型的对象。
最奇怪的是,在setter上放置@JsonIgnore和在setter上使用@JsonProperty对于大多数情况下的属性是原始的。
这实际上是解决方案的一部分。我还必须添加objectMapper.disable(MapperFeature.USE_GETTERS_AS_SETTERS),然后它就起作用了。请编辑你的答案,我会接受它。令人伤心的是,没有更清晰的方法(至少我无法找到它)。 –
@NishantNagwani - 奇怪的,没有启用该功能的作品。我为我的答案添加了一个可选的注释,但是我很好奇,如果您的设置有些不同,需要使用'USE_GETTERS_AS_SETTERS'。 – Perception
我又试了一次。不适合我的环境。我正在使用杰克逊2.1.1。这是我得到的错误 {“message”:“格式错误的json传递给服务器,使用了不正确的数据类型:\ n反序列化'setterless'属性'money':get方法返回null(通过引用链:com.abc。 def.Money])“ } –