Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据REST-覆盖存储库findAll而不创建/search/findAll URL_Java_Spring_Rest_Spring Data Rest - Fatal编程技术网

Java Spring数据REST-覆盖存储库findAll而不创建/search/findAll URL

Java Spring数据REST-覆盖存储库findAll而不创建/search/findAll URL,java,spring,rest,spring-data-rest,Java,Spring,Rest,Spring Data Rest,有没有办法阻止SpringDataREST为重写的存储库方法创建a/SearchURL 例如,以下代码导致生成与集合资源功能重复的/search/findAll URL: public interface EmployeeRepository extends CrudRepository<Employee, Long> { @Override @Query("SELECT e FROM Empolyee e") Iterable<Employee>

有没有办法阻止SpringDataREST为重写的存储库方法创建a/SearchURL

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

public interface EmployeeRepository extends CrudRepository<Employee, Long>
{
    @Override
    @Query("SELECT e FROM Empolyee e")
    Iterable<Employee> findAll();
}
public接口EmployeeRepository扩展了crudepository
{
@凌驾
@查询(“从Empolyee e中选择e”)
Iterable findAll();
}
当重写单个方法时,这只是一个表面问题,但是如果您试图用相同的函数名和不同的参数重写多个方法,例如PagingAndSortingRepository中的两个findAll方法,那么spring会抛出一个异常,因为它试图将两个函数映射到同一路径

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);
}
公共接口EmployeeRepository扩展了分页和排序存储库
{
@凌驾
@查询(“从员工e中选择e”)
Iterable findAll();
@凌驾
@查询(“从员工e中选择e”)
Iterable findAll(排序);
@凌驾
@查询(“从员工e中选择e”)
页面findAll(可分页可分页);
}
结果:

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)
    ...
java.lang.IllegalStateException:检测到不明确的搜索映射。公共抽象java.lang.Iterable uk.co.essl.lotster.entity.employee.EmployeeRepository.findAll(org.springframework.data.domain.Sort)和公共抽象java.lang.Iterable uk.co.essl.lotster.entity.employee.EmployeeRepository.findAll()都映射到/findAll!调整配置以获得明确的路径!
位于org.springframework.data.rest.core.mapping.SearchResourceMappings。(SearchResourceMappings.java:60)
位于org.springframework.data.rest.core.mapping.RepositoryResourceMappings.getSearchResourceMappings(RepositoryResourceMappings.java:128)
位于springfox.documentation.spring.data.rest.EntityContext.searchMappings(EntityContext.java:107)
...
@RestResource(exported=false)
@RestResource(exported=false)

有没有办法阻止SpringDataREST为重写的存储库方法创建a/SearchURL

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

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

@RestResource(exported = false)
Page<Employee> findBy(Pageable pageable);
@覆盖
默认页面findAll(可分页可分页){
返回findBy(可分页);
}
@RestResource(导出=假)
页面查找方式(可分页可分页);
此技巧还允许您为“获取所有记录”请求设置默认排序顺序:

@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);
}
@覆盖
默认页面findAll(可分页的p){
如果(p.getSort()==null){
//默认排序顺序
返回findBy(新页面请求(p.getPageNumber(),p.getPageSize(),Sort.Direction.DESC,“myField”);
}
返回findBy(可分页);
}
享受!)


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

有没有办法阻止SpringDataREST为重写的存储库方法创建a/SearchURL

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

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

@RestResource(exported = false)
Page<Employee> findBy(Pageable pageable);
@覆盖
默认页面findAll(可分页可分页){
返回findBy(可分页);
}
@RestResource(导出=假)
页面查找方式(可分页可分页);
此技巧还允许您为“获取所有记录”请求设置默认排序顺序:

@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);
}
@覆盖
默认页面findAll(可分页的p){
如果(p.getSort()==null){
//默认排序顺序
返回findBy(新页面请求(p.getPageNumber(),p.getPageSize(),Sort.Direction.DESC,“myField”);
}
返回findBy(可分页);
}
享受!)



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

),该请求也会停止导出标准集合资源。这也会停止导出标准集合资源。