当前位置: 首页 > 知识库问答 >
问题:

带有自定义方法实现的Spring Data Rest/HateOAS

林夕
2023-03-14

考虑到Spring数据存储库的自定义实现,我使用存储库上的@repositoryrestresource带来所有HATEOAS生成的Goodnes:

@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends  PagingAndSortingRepository<PersonNode,Long>,
                                            PersonRepositoryCustom {


    List<PersonNode> findBySurname(@Param("0") String name);
}

现在,按照前面提到的文档,我已经用附加的简单方法创建了PersonRepositoryCustom,用于介绍目的:

public interface PersonRepositoryCustom {

    public String printPerson(PersonNode personNode);
}

实施方式是:

public class PersonRepositoryImpl implements PersonRepositoryCustom{

    @Override
    public String printPerson(PersonNode personNode) {
        return "It Works!";
    }
}

我希望默认的SDR自动生成endpoint保持,只添加新的自定义方法/新的实现。我应该如何将这个自定义方法与spring-data REST/HATEOAS一起使用?使用简单的@repositoryrestresource可以自动生成控制器endpoint。如果我想提供一些自定义方法呢?我想我必须手动创建控制器,但在这个示例中它应该是什么样子?

共有1个答案

戚浩淼
2023-03-14

首先,像Public String printPerson(PersonNode PersonNode)这样的存储库方法是一种RPC样式的API,并且是一种已知的反模式,因此您应该以符合REST的方式设计API(例如,请参见如何为非CRUD“命令”设计REST API(如激活和停用资源?)

问题的解决方案如下所示:

>

  • 创建一个自定义的@restcontroller(正如您所设想的那样),为自定义方法定义@requestmapping,这些方法调用相关的实现。

    为您的实体创建一个新的ResourceProcessor并重写它的Process方法,添加一个指向资源的新链接,该链接指向您的自定义方法,如/people/{id}/printPerson或您的映射定义。

    下面是我的项目中的一个示例(博客实体需要列出其类别):

    @Component
    public static class BlogResourceProcessor implements ResourceProcessor<Resource<Blog>> {
        @Override
        public Resource<Blog> process(Resource<Blog> blogResource) {
            UriComponents uriComponents = ServletUriComponentsBuilder.fromCurrentContextPath()
                    .path("/blog/{id}/categories").buildAndExpand(Long.toString(blogResource.getContent().getId()));
            blogResource.add(new Link(uriComponents.toUriString(), "categories"));
            return blogResource;
        }
    }
    

  •  类似资料:
    • java代码: 类文章 类自定义适配器: 错误logcat:

    • 我读到了Crudrepository,这是一个接口,用于在特定类型的存储库上进行通用CRUD操作。 但是我们可以创建我们的自定义接口并扩展CrudRepository。

    • 本文向大家介绍Android实现自定义带文字和图片Button的方法,包括了Android实现自定义带文字和图片Button的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android实现自定义带文字和图片Button的方法。分享给大家供大家参考。具体分析如下: 在Android开发中经常会需要用到带文字和图片的button,下面来讲解一下常用的实现办法。 一.用系统自带的Butt

    • 本文向大家介绍MFC自定义消息的实现方法,包括了MFC自定义消息的实现方法的使用技巧和注意事项,需要的朋友参考一下 一、概述: 消息机制是windows程序的典型运行机制,在MFC中有很多已经封装好了的消息,如WM_BTN**等。但是在有些特殊情况下我们需要自定义一些消息去完成一些我们所需要的功能,这时候MFC的向导不能帮助我们做到这一点。对此,我们可以通过添加相应的代码去完成这个功能。 二、实现

    • 本文向大家介绍DevExpress实现自定义TreeListNode的Tooltip的方法,包括了DevExpress实现自定义TreeListNode的Tooltip的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例展示了DevExpress实现自定义TreeListNode的Tooltip的方法,具体方法如下所示: 主要功能代码如下: 代码运行效果如下:

    • 本文向大家介绍Vue的elementUI实现自定义主题方法,包括了Vue的elementUI实现自定义主题方法的使用技巧和注意事项,需要的朋友参考一下 使用vue开发项目,用到elementUI,根据官网的写法,我们可以自定义主题来适应我们的项目要求,下面来介绍一下两种方法实现的具体步骤,(可以参考官方文档自定义主题官方文档),先说项目中没有使用scss编写,用主题工具的方法(使用的较多) 第一种