【发布时间】:2016-01-12 13:38:00
【问题描述】:
我有类似这两个类的东西:
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;
}
以及以下视图类:
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 无法做到这一点,是否有替代方案?
我知道一种解决方案是向 Project 类添加一个 userID 字段,但 setter 需要调用存储库(同时更新用户字段),这会弄乱我的类图。
【问题讨论】:
标签: java json spring serialization jackson