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

Spring Data REST-覆盖存储库findAll而不创建 /search/findAllURL

景景胜
2023-03-14

是否有任何方法可以阻止Spring Data REST为重写的存储库方法创建/搜索URL?

例如,以下代码导致生成一个与集合资源的功能重复的/搜索/findAll URL:

public interface EmployeeRepository extends CrudRepository<Employee, Long>
{
    @Override
    @Query("SELECT e FROM Empolyee e")
    Iterable<Employee> findAll();
}

这只是覆盖单个方法时的表面问题,但如果您尝试覆盖具有相同函数名称和不同参数的多个方法,例如PagingAndSortinRepository中的两个findAll方法,则Spring会引发异常,因为它试图将2个函数映射到相同的路径。

public interface EmployeeRepository extends PagingAndSortingRepository<Employee, Long>
{
    @Override
    @Query("SELECT e FROM Employee e")
    Iterable<Employee> findAll();

    @Override
    @Query("SELECT e FROM Employee e")
    Iterable<Employee> findAll(Sort sort);

    @Override
    @Query("SELECT e FROM Employee e")  
    Page<Employee> findAll(Pageable pageable);
}

结果如下:

java.lang.IllegalStateException: Ambiguous search mapping detected. Both public abstract java.lang.Iterable uk.co.essl.roster.entity.employee.EmployeeRepository.findAll(org.springframework.data.domain.Sort) and public abstract java.lang.Iterable uk.co.essl.roster.entity.employee.EmployeeRepository.findAll() are mapped to /findAll! Tweak configuration to get to unambiguous paths!
    at org.springframework.data.rest.core.mapping.SearchResourceMappings.<init>(SearchResourceMappings.java:60)
    at org.springframework.data.rest.core.mapping.RepositoryResourceMappings.getSearchResourceMappings(RepositoryResourceMappings.java:128)
    at springfox.documentation.spring.data.rest.EntityContext.searchMappings(EntityContext.java:107)
    ...

共有2个答案

颜宸
2023-03-14

@RestResource(导出=false)

西门凯康
2023-03-14

是否有任何方法可以阻止Spring Data REST为重写的存储库方法创建/搜索URL?

我发现了以下解决此问题的技巧:

@Override
default Page<Employee> findAll(Pageable pageable) {
    return findBy(pageable);
}

@RestResource(exported = false)
Page<Employee> findBy(Pageable pageable);

更多其他此技巧允许您为“获取所有记录”请求设置默认排序顺序:

@Override
default Page<Employee> findAll(Pageable p) {
    if (p.getSort() == null) {      
        // The default sort order
        return findBy(new PageRequest(p.getPageNumber(), p.getPageSize(), Sort.Direction.DESC, "myField"));
    }
    return findBy(pageable);
}

享受!))

@RestResource(exported=false)仅用于重写的方法不会有帮助,因为此方法阻止获取“所有记录”请求(

 类似资料:
  • 主要内容:创建一个远程存储库在本章中,我们将看到如何创建一个远程Git仓库; 我们需要一个远程Git仓库来执行团队协作。这一篇文章很重要,直接影响到后面的章节的学习。所以,希望大家可先耐心地看完本章内容,并按本章一步步的操作。 创建一个远程存储库 我们将演示在 http://git.oschina.net/ 软件项目的托管平台上创建和初始化一个新的存储库。 注:你也可以使用 GitHub (http://github.com

  • 我想在我新创建的GitHub存储库中添加一个新文件夹,而不安装用于(Mac、Linux和Windows)的Git设置。有可能这样做吗? 当我在不同的系统/机器上工作时,我不能让Git一直陪伴在我身边。我知道如何在上的存储库中直接添加文件。我们也可以创建一个文件夹吗?

  • 问题内容: 我想创建本地Maven存储库。我做了以下步骤: 在中安装了Maven插件 在apache服务器中创建了一个文件夹localrepository,可使用访问 在我的项目中,我提供了 但这并没有解决上的jar 是否需要提供存储库? 问题答案: 使用具有默认配置的Web服务器来设置简单的存储库。关键是目录结构。该文档没有明确提及它,但其结构与本地存储库相同。 要建立一个内部存储库,只需要您有

  • 问题内容: 我创建了一个简单的存储库,其中包含系统中的所有人员,一切似乎都正常运行。我可以根据给定的键和值添加,删除甚至取回单个人,但是由于某种原因,我无法直接取回存储在存储库中的所有人。我尝试通过使用findAll()方法来执行此操作,该方法应返回一个可迭代的对象。然后,我尝试使用可迭代对象进行迭代,并将每个人存储在要函数返回的arraylist中。 打印线打印“ 3”,因此存储库不为空,但在以

  • 是否有一种方法可以使通用Spring数据JPA存储库正确处理类似的方法?例如只返回狗,而不返回所有动物?或者至少,最好的变通方法是什么? 它的工作几乎完美,保存每一个动物在自己的桌子上,等等。唯一的问题是:同时返回水豚和狗。这个答案解释说: 这只有在域类使用单表继承时才起作用。我们在引导时能得到的关于domain类的唯一信息是它将是Product对象。因此,对于像findAll()甚至findBy