gpt4 book ai didi

java - Spring JsonView 解除嵌套字段

转载 作者:行者123 更新时间:2023-11-30 07:40:45 25 4
gpt4 key购买 nike

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

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

我的 Controller 如下:

@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 需要调用存储库(也更新用户字段),这会弄乱我的类图。

最佳答案

看起来有一个名为 @JsonUnwrapped 的注释,它删除了对象包装器,并且其中的所有属性都包含在父对象中。

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

希望这有帮助。

关于java - Spring JsonView 解除嵌套字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34745208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com