Я пытаюсь настроить приложение Spring Data REST + QueryDSL + JPA для обработки настраиваемых параметров запроса веб-службы. Учитывая простую модель предметной области и ее репозиторий...
public class Person {
private Long id;
private String name;
private Integer age;
...
}
@RepositoryRestResource
public interface PersonRepository extends PagingAndSortingRepository<Person, Long>, QueryDslPredicateExecutor<Person> {
}
Я хотел бы иметь возможность выполнять динамические запросы веб-службы, которые будут отображаться в операциях предиката QueryDSL следующим образом:
/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'
Казалось бы, самый простой способ сделать это — переопределить QuerydslPredicateBuilder
по умолчанию, который использует Spring Data REST. Этот bean-компонент создается как часть создания bean-компонента RootResourceInformationHandlerMethodArgumentResolver
в классе RepositoryRestMvcConfiguration
. Это создает несколько проблем.
Нет четкой документации о том, как переопределить bean-компонент в классах автоконфигурации. Я мог бы расширить
RepositoryRestMvcConfiguration
и переопределить метод компонента, но неясно, нарушит ли это какую-либо другую конфигурацию.HandlerMethodResolver
по умолчанию, который используетQuerydslPredicateBuilder
,RootResourceInformationHandlerMethodArgumentResolver
, не является общедоступным классом. В основном мне нужно было бы скопировать код для этого существующего класса, чтобы заставить его работать по назначению.Учитывая вышеупомянутые проблемы, кажется странным, что нет более простого метода настройки этого поведения. Я что-то упускаю?
Как лучше всего переопределить компоненты конфигурации по умолчанию в Spring Data REST?