gpt4 book ai didi

spring - 如何强制 Spring HATEOAS 资源渲染一个空的嵌入式数组?

转载 作者:IT老高 更新时间:2023-10-28 13:58:58 26 4
gpt4 key购买 nike

我有以下 Controller 方法:

@RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE, value = "session/{id}/exercises")
public ResponseEntity<Resources<Exercise>> exercises(@PathVariable("id") Long id) {

Optional<Session> opt = sessionRepository.findWithExercises(id);
Set<Exercise> exercises = Sets.newLinkedHashSet();

if (opt.isPresent()) {
exercises.addAll(opt.get().getExercises());
}

Link link = entityLinks.linkFor(Session.class)
.slash(id)
.slash(Constants.Rels.EXERCISES)
.withSelfRel();

return ResponseEntity.ok(new Resources<>(exercises, link));
}

所以基本上我是想公开一个 Set<>Exercise特定 Session 的实体.但是,当练习实体为空时,我会得到这样的 JSON 表示:

{
"_links": {
"self": {
"href": "http://localhost:8080/api/sessions/2/exercises"
}
}
}

所以基本上没有嵌入式实体,而像下面这样的东西会更好:

{
"_links": {
"self": {
"href": "http://localhost:8080/api/sessions/2/exercises"
}
},
"_embedded": {
"exercises": []
}
}

知道如何执行吗?

最佳答案

这里的问题是,如果不付出额外的努力,就无法找出空集合是 Exercise 的集合。 Spring HATEOAS 有一个帮助类来解决这个问题:

EmbeddedWrappers wrappers = new EmbeddedWrappers(false);
EmbeddedWrapper wrapper = wrappers.emptyCollectionOf(Exercise.class);
Resources<Object> resources = new Resources<>(Arrays.asList(wrapper));

EmbeddedWrapper 允许您将要添加到 ResourceResources 的对象显式标记为嵌入,甚至可能手动定义它们的 rel应该暴露在下面。正如您在上面看到的,帮助器还允许您将给定类型的空集合添加到 _embedded 子句。

关于spring - 如何强制 Spring HATEOAS 资源渲染一个空的嵌入式数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30286795/

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