Kak*_*ait 7 java spring spring-data-rest spring-hateoas
首先,我阅读了上一个问题:在spring数据REST中公开集合实体上的链接
但问题仍然存在,没有诡计.
实际上,如果我想公开集合资源的链接,我正在使用以下代码:
@Component
public class FooProcessor implements ResourceProcessor<PagedResources<Resource<Foo>>> {
private final FooLinks fooLinks;
@Inject
public FooProcessor(FooLinks fooLinks) {
this.FooLinks = fooLinks;
}
@Override
public PagedResources<Resource<Foo>> process(PagedResources<Resource<Foo>> resource) {
resource.add(fooLinks.getMyCustomLink());
return resource;
}
}
Run Code Online (Sandbox Code Playgroud)
这是正常的,除非收集是空的...
唯一可行的方法是将以下代码替换为:
@Component
public class FooProcessor implements ResourceProcessor<PagedResources> {
private final FooLinks fooLinks;
@Inject
public FooProcessor(FooLinks fooLinks) {
this.FooLinks = fooLinks;
}
@Override
public PagedResources process(PagedResources resource) {
resource.add(fooLinks.getMyCustomLink());
return resource;
}
}
Run Code Online (Sandbox Code Playgroud)
但通过这样做,链接将暴露给所有集合.
我可以创造条件只暴露我想要的但我认为不干净.
我认为 spring 做了一些魔法,试图发现集合的类型 - 在一个空集合上,你无法判断它是什么类型 - 所以 spring-data-rest 无法确定要使用哪个 ResourceProcessor 。
我想我已经看到
org.springframework.data.rest.webmvc.ResourceProcessorHandlerMethodReturnValueHandler.ResourcesProcessorWrapper#isValueTypeMatch他们尝试通过查看集合中的第一个元素来确定类型,否则就停止处理:
if (content.isEmpty()) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
所以我认为你无法使用 spring-data-rest 解决这个问题。对于您的控制器,您可以回退到编写自定义控制器并使用 spring hatoas 并实现您自己的 ResourceAssemblerSupport 来查看空集合上的链接。
| 归档时间: |
|
| 查看次数: |
518 次 |
| 最近记录: |