Chr*_*Geo 14 spring spring-hateoas
我有以下控制器方法:
@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));
}
Run Code Online (Sandbox Code Playgroud)
所以基本上我试图揭露一个特定Set<>的Exercise实体Session.当exercise实体为空时,我得到一个像这样的JSON表示:
{
"_links": {
"self": {
"href": "http://localhost:8080/api/sessions/2/exercises"
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以基本上没有嵌入式实体,而以下类似的东西是可取的:
{
"_links": {
"self": {
"href": "http://localhost:8080/api/sessions/2/exercises"
}
},
"_embedded": {
"exercises": []
}
}
Run Code Online (Sandbox Code Playgroud)
任何想法如何执行这个?
Oli*_*ohm 17
这里的问题是,如果没有额外的努力,就没有办法发现空集合是一个集合Exercise.Spring HATEOAS有一个帮助类可以解决这个问题:
EmbeddedWrappers wrappers = new EmbeddedWrappers(false);
EmbeddedWrapper wrapper = wrappers.emptyCollectionOf(Exercise.class);
Resources<Object> resources = new Resources<>(Arrays.asList(wrapper));
Run Code Online (Sandbox Code Playgroud)
An EmbeddedWrapper允许您明确标记要添加到嵌入对象Resource或Resources嵌入对象的对象,甚至可以手动定义它们应在其下公开的rel.正如您在上面看到的那样,帮助程序还允许您向_embedded子句添加给定类型的空集合.
| 归档时间: |
|
| 查看次数: |
4898 次 |
| 最近记录: |