Java Spring JsonView未列出嵌套字段
我有两个类似的课程:Java Spring JsonView未列出嵌套字段,java,json,spring,serialization,jackson,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 annotation
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输出将用户ID包装在用户对象中:
[
{
"projectID": 1,
"user": {
"userID": 1
}
}
]
这就像预期的一样,我可以让我的客户使用它,但它似乎还没有完成。。。我想去掉“用户”包装:
有没有干净的方法?最好使用另一个注释。我还没有任何自定义序列化程序,我不想开始使用它们。如果JsonViews不能做到这一点,是否有替代方案
我知道一个解决方案是在项目类中添加一个userID字段,但是setter需要调用存储库(同时更新用户字段),这会弄乱我的类图。看起来有一个名为
@JsonUnwrapped
的注释删除了对象包装器,其中的所有属性都包含在父对象中
希望这能有所帮助。看起来确实很有希望!我看到它有一个属性“enabled”,如果控制器方法用@JsonView标记,我可以将其设置为true吗?如果没有,我可以将其设置为false吗?根据文档,属性
enabled
默认设置为true。我认为在属性上同时添加@JsonUnwrapped
和@JsonView
注释是一个问题。我得进一步挖掘。真有趣!
[
{
"projectID": 1,
"userID": 1
}
]