小编Nis*_*ani的帖子

反序列化时忽略属性

我有一个简单的接口,带有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适用于大多数情况.

java json jackson

29
推荐指数
5
解决办法
4万
查看次数

覆盖子类中的@jsonIgnore

我有一个班级家长

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.

java json jackson

21
推荐指数
1
解决办法
7526
查看次数

标签 统计

jackson ×2

java ×2

json ×2