我正在尝试自定义Spring Data REST + QueryDSL + JPA应用程序来处理自定义Web服务查询参数。给出一个简单的域模型和它的存储库......
public class Person {
private Long id;
private String name;
private Integer age;
...
}
@RepositoryRestResource
public interface PersonRepository extends PagingAndSortingRepository<Person, Long>, QueryDslPredicateExecutor<Person> {
}
我希望能够以下列方式执行将映射到QueryDSL谓词操作的动态Web服务查询:
/person?name=Joe // works by default
/person?nameEndsWith=oe // resolves to path 'person.name' with operations 'ENDS_WITH'
/person?ageGreaterThan=20 // resolves to path 'person.age' with operation 'GT'
看起来最简单的方法是覆盖Spring Data REST使用的默认QuerydslPredicateBuilder
。此bean是作为RootResourceInformationHandlerMethodArgumentResolver
类中RepositoryRestMvcConfiguration
bean创建的一部分创建的。这提出了几个问题。
关于如何在自动配置类中重写bean,没有明确的文档。我可以扩展RepositoryRestMvcConfiguration
并覆盖bean方法,但不清楚这是否会破坏任何其他配置。
使用HandlerMethodResolver
,QuerydslPredicateBuilder
的默认RootResourceInformationHandlerMethodArgumentResolver
不是公共类。我基本上需要复制这个现有类的代码,以使其按预期工作。
鉴于上述问题,似乎很奇怪没有更简单的方法来自定义此行为。我错过了什么吗?
在Spring Data REST中覆盖默认配置bean的最佳做法是什么?