【发布时间】:2017-11-18 17:23:43
【问题描述】:
有什么方法可以阻止 Spring Data REST 为覆盖的存储库方法创建 /search URL?
例如,以下代码会生成一个 /search/findAll URL,它复制了集合资源的功能:
public interface EmployeeRepository extends CrudRepository<Employee, Long>
{
@Override
@Query("SELECT e FROM Empolyee e")
Iterable<Employee> findAll();
}
这只是覆盖单个方法时的表面问题,但如果您尝试覆盖具有相同函数名称和不同参数的多个方法,例如 PagingAndSortingRepository 中的两个 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)
...
【问题讨论】:
标签: java spring rest spring-data-rest