Jackson-使用JsonView反序列化

Jackson-使用JsonView反序列化,jackson,jackson2,json-view,Jackson,Jackson2,Json View,我试图限制JSON对象中哪些属性是使用Jackson JSONViews反序列化的。这样做的目的是防止API的使用者提交他们不应该提交的数据 问题是,我要么误解了JSONViews,要么我做错了什么。见下文 我在春天开始尝试这样做,但我注意到,即使下面的简单测试也不起作用 帐户类别 public class Account { @Id private String id; private String name; private List<String

我试图限制JSON对象中哪些属性是使用Jackson JSONViews反序列化的。这样做的目的是防止API的使用者提交他们不应该提交的数据

问题是,我要么误解了JSONViews,要么我做错了什么。见下文

我在春天开始尝试这样做,但我注意到,即使下面的简单测试也不起作用

帐户类别

public class Account {

    @Id
    private String id;

    private String name;

    private List<String> items;

    private List<User> users;

    @JsonView(AccountViews.Private.class)
    public void setId(String id) {
        this.id = id;
    }

    @JsonView(AccountViews.Public.class)
    public void setName(String name) {
        this.name = name;
    }

    @JsonView(AccountViews.Public.class)
    public void setItems(List<String> items) {
        this.items = items;
    }

    @JsonView(AccountViews.Private.class)
    public void setUsers(List<User> users) {
        this.users = users;
    }
}
试验

不幸的是,第二个断言失败了,因为用户内部有一个用户对象

基本上,即使“users”是Account的一个属性,我也不希望该值被反序列化,因为我使用了JSONView(AccountViews.Public.class)。然而,无论我尝试什么,它似乎总是被反序列化,并且出现在account对象上

非常感谢您的帮助

错误

`java.lang.AssertionError:应为null,但为:
位于org.junit.Assert.fail(Assert.java:88)
位于org.junit.Assert.failNotNull(Assert.java:755)
位于org.junit.Assert.assertNull(Assert.java:737)
位于org.junit.Assert.assertNull(Assert.java:747)
在`

将getter/setter上的注释移动到字段中。行吗?不行,恐怕不行。我也试过了,但最后还是注释了setter。你发布的代码在我的机器上运行。我可以看到
用户
在反序列化过程中被跳过。我正在使用Jackson 2.7.5
public class AccountViews {

    public interface Public {}

    public interface Private extends Public {}

}
@Test
public void testDeserialization(){

        ObjectMapper mapper = new ObjectMapper();
        mapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION);

        Account account = mapper.readerWithView(AccountViews.Public.class).forType(Account.class).readValue("{ \"name\": \"account1\", \"items\": [\"item1\"], \"users\": [ { \"firstname\": \"user1_firstname\", \"lastname\": \"user1_lastname\" }] }");

        assertEquals(account.getName(), "account1");
        assertNull(account.getUsers());

}
`java.lang.AssertionError: expected null, but was:<[User@609db43b]>
at org.junit.Assert.fail(Assert.java:88)
at org.junit.Assert.failNotNull(Assert.java:755)
at org.junit.Assert.assertNull(Assert.java:737)
at org.junit.Assert.assertNull(Assert.java:747)
at`