Spring JsonView不需要嵌套字段

时间:2016-01-12 13:38:00

标签: java json spring serialization jackson

我有类似这两个类的东西:

public class User {
    @JsonView(UserView.IdOnly.class)
    int userID;

    String name;
}

public class Project {
    @JsonView(ProjectView.IdOnly.class)
    int projectID;

    @JsonView(ProjectView.Summary.class)
    // JPA annotations ommitted
    User user;
}

以下的View类:

public class UserView extends View {}

public class ProjectView extends View {
    public interface Summary extends IdOnly {}
}

public class View {
    public interface IdOnly {}
}

我的控制器如下:

@JsonView(ProjectView.Summary.class)
@RequestMapping(value="/project/", method = RequestMethod.GET)
public List getProjects() {
    return repository.findAll();
}

如您所见,JSON输出将userID包装在User对象中:

[
  {
    "projectID": 1,
    "user": {
      "userID": 1
    }
  }
]

这可以按预期工作,我可以让我的客户使用它,但它似乎没有完成......我想摆脱"用户"包装器:

[
  {
    "projectID": 1,
    "userID": 1
  }
]

有没有办法干净利落地做到这一点?优选地,通过使用另一个注释。我还没有任何自定义序列化程序,我不想开始使用它们。如果不能用JsonViews完成,还有其他选择吗?

我知道一个解决方案是将一个userID字段添加到Project类中,但是setter需要调用存储库(也要更新用户字段),这会弄乱我的类图。

1 个答案:

答案 0 :(得分:1)

看起来有一个名为private void dataGridView1_SizeChanged(object sender, EventArgs e) { foreach (DataGridViewRow row in dataGridView1.Rows) { row.Height = (dataGridView1.ClientRectangle.Height - dataGridView1.ColumnHeadersHeight) / dataGridView1.Rows.Count; } } 的注释删除了对象包装器,其中的所有属性都包含在父对象中。

http://fasterxml.github.io/jackson-annotations/javadoc/2.0.0/com/fasterxml/jackson/annotation/JsonUnwrapped.html

希望这有帮助。