杰克逊:@JsonProperty&隐藏的子类属性超级

时间:2017-03-31 16:55:56

标签: java json jackson

假设我有两个类:

public class Super {
    @JsonView(SpecialCaseView.class)
    @JsonProperty("name")
    public String getDisplayName() {
        return "super name";
    }
}

public class Duper extends Super {
    private String name = "John Smith";

    public String getName() {
       return name;
    }
}

当我对Duper对象进行正常序列化时(例如,使用new ObjectMapper().writerWithView(ADifferentView.class).writeValueAsString(new Duper())),我希望得到

{
  "name": "John Smith"
}
相反,我一无所获。这似乎是因为超级班的名字"财产首先被捡起,但杰克逊因为具体的观点而忽略了它。

这是一个错误吗?

如果没有,有什么方法可以解决这个问题,或者至少是一种检测方法,或者收到警告?

1 个答案:

答案 0 :(得分:0)

嗯,您使用的是哪个版本的杰克逊?无论如何,我只是尝试了这个代码(与杰克逊1)

ObjectMapper mapper = new ObjectMapper();

String json = mapper.writeValueAsString(new Duper());

System.out.println(json);

结果是

{"name":"super name"}

如果将 @JsonView 放在子类中的 getName()方法中,您将获得所需的内容。

@JsonView(SpecialCaseView.class)
public String getName() {
   return name;
}

结果

{"name":"John Smith"}
相关问题