扩展 Spring Data Rest 索引资源链接
Extend Spring Data Rest index resource links
我正在将我所有的 api 端点映射到基础 url /api/
下。现在我想通过 HATEOAS 使用 spring-data-rest 公开所有可用端点,以便客户端应用程序可以处理这些信息。默认情况下,这似乎是开箱即用的,因为 GET /api/
returns 所有找到的 Spring 存储库及其各自的 url 如下所示:
{
"_links" : {
"news" : {
"href" : "http://localhost:8080/api/news{?page,size,sort,projection}",
"templated" : true
}
}
}
不过,我想添加一些指向其他资源的自定义链接。我试过这个:
@RequestMapping("/api")
public class AppController {
@RequestMapping("/")
public ResponseEntity<ResourceSupport> getEndpoints () {
ResourceSupport resource = new ResourceSupport();
resource.add(linkTo(UserController.class).withRel("users"));
return new ResponseEntity<>(resource, HttpStatus.OK);
}
}
但这实际上覆盖了所有内容。所以我的问题是如何使用一些自定义链接为基本资源扩展 spring-data-rest 的标准输出?
我假设您正在使用 spring-data-rest
。
要添加指向服务索引资源的链接,您必须编写 ResourceProcessor<RepositoryLinksResource>
生成索引资源时将调用此处理器,您可以使用它向索引资源添加链接。
这是一个例子:
/**
* Adds custom controller links to the index resource
*/
@Component
public class RepositoryLinksResourceProcessor implements ResourceProcessor<RepositoryLinksResource> {
@Override
public RepositoryLinksResource process(RepositoryLinksResource resource) {
resource.add(linkTo(UserController.class).withRel("users"));
return resource;
}
}
在 Spring 引导版本 2.4.4 下,您可以
@Component
public class RepositoryLinksResourceProcessor extends ProfileResourceProcessor {
/**
* Creates a new {@link ProfileResourceProcessor} with the given {@link RepositoryRestConfiguration}.
*
* @param configuration must not be {@literal null}.
*/
public RepositoryLinksResourceProcessor(RepositoryRestConfiguration configuration) {
super(configuration);
}
@Override
public RepositoryLinksResource process(RepositoryLinksResource resource) {
return super.process(resource);
}
}
我正在将我所有的 api 端点映射到基础 url /api/
下。现在我想通过 HATEOAS 使用 spring-data-rest 公开所有可用端点,以便客户端应用程序可以处理这些信息。默认情况下,这似乎是开箱即用的,因为 GET /api/
returns 所有找到的 Spring 存储库及其各自的 url 如下所示:
{
"_links" : {
"news" : {
"href" : "http://localhost:8080/api/news{?page,size,sort,projection}",
"templated" : true
}
}
}
不过,我想添加一些指向其他资源的自定义链接。我试过这个:
@RequestMapping("/api")
public class AppController {
@RequestMapping("/")
public ResponseEntity<ResourceSupport> getEndpoints () {
ResourceSupport resource = new ResourceSupport();
resource.add(linkTo(UserController.class).withRel("users"));
return new ResponseEntity<>(resource, HttpStatus.OK);
}
}
但这实际上覆盖了所有内容。所以我的问题是如何使用一些自定义链接为基本资源扩展 spring-data-rest 的标准输出?
我假设您正在使用 spring-data-rest
。
要添加指向服务索引资源的链接,您必须编写 ResourceProcessor<RepositoryLinksResource>
生成索引资源时将调用此处理器,您可以使用它向索引资源添加链接。
这是一个例子:
/**
* Adds custom controller links to the index resource
*/
@Component
public class RepositoryLinksResourceProcessor implements ResourceProcessor<RepositoryLinksResource> {
@Override
public RepositoryLinksResource process(RepositoryLinksResource resource) {
resource.add(linkTo(UserController.class).withRel("users"));
return resource;
}
}
在 Spring 引导版本 2.4.4 下,您可以
@Component
public class RepositoryLinksResourceProcessor extends ProfileResourceProcessor {
/**
* Creates a new {@link ProfileResourceProcessor} with the given {@link RepositoryRestConfiguration}.
*
* @param configuration must not be {@literal null}.
*/
public RepositoryLinksResourceProcessor(RepositoryRestConfiguration configuration) {
super(configuration);
}
@Override
public RepositoryLinksResource process(RepositoryLinksResource resource) {
return super.process(resource);
}
}