2017-11-18 10 views
0

Spring Data RESTがオーバーライドされたリポジトリメソッドの/ search URLを作成しないようにする方法はありますか?例えばSpring Data REST -/search/findAll URLを作成せずにリポジトリfindAllを上書きする

次のコードは、コレクションリソースの機能を複製し、生成された/検索/ findAllのURLでの結果:

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

つのメソッドをオーバーライドする場合にのみ化粧品の問題ですが、あなたがしようとした場合同じ関数名と異なるパラメータを持つ複数のメソッドをオーバーライドするには、たとえばPagingAndSortingRepositoryのfindAllメソッドと、2つの関数を同じパスにマップしようとしているために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); 
} 

結果:

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

オーバーライドされたリポジトリ方法について/検索のURLを作成するから春データRESTを防止する方法はありますか?

私は、この問題を解決するために、次のトリックが見つかりました:

@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)も輸出されてから、標準的なコレクションのリソースを停止し、すべてのレコードの要求(

+0

感謝 –

0

@RestResource(exported = false)

+0

「を、このブロックはをGET起こす「助けにはなりません。素晴らしい作品 –

関連する問題