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
  }
]