使用spring数据REST我已经公开了一个ProjectRepository
,它支持列出项目并对它们执行CRUD操作。当我去http://localhost:8080/projects/
时,我得到了我期望的项目列表。
我要做的是将自定义操作添加到Project Collection的JSON响应的_links
部分。
例如,我希望调用http://localhost:8080/projects/
来返回这样的内容:
{
"_links" : {
"self" : {
"href" : "http://localhost:8080/projects/{?page,size,sort}",
"templated" : true
},
"search" : {
"href" : "http://localhost:8080/projects/search"
},
"customAction" : {
"href" : "http://localhost:8080/projects/customAction"
}
},
"page" : {
"size" : 20,
"totalElements" : 0,
"totalPages" : 0,
"number" : 0
}
}
在某些控制器中定义了customAction
。
我尝试过创建以下课程:
public class ProjectCollectionResourceProcessor implements ResourceProcessor<Resource<Collection<Project>>> {
@Override
public Resource<Collection<Project>> process(Resource<Collection<Project>> listResource) {
// code to add the links to customAction here
return listResource;
}
}
并添加以下Bean添加到我的应用程序配置中:
@Bean
public ProjectCollectionResourceProcessor projectCollectionResourceProcessor() {
return new ProjectCollectionResourceProcessor();
}
但process(...)
似乎无法被召唤。添加链接到资源集合的正确方法是什么?
答案 0 :(得分:4)
集合资源呈现Resources<Resource<Project>>
的实例,而不是Resource<Collection<Project>>
。因此,如果您相应地更改了ResourceProcessor
实现中的通用类型,那么它应该按预期工作。
答案 1 :(得分:4)
我有同样的问题。对我有用的是:
public class ProjectsResourceProcessor implements ResourceProcessor<PagedResources<Resource<Project>>> {
private final @NonNull EntityLinks entityLinks;
@Override
public PagedResources<Resource<Project>> process(PagedResources<Resource<Project>> pagedResources) {
...
return pagedResources;
}
}