Я создал простой контроллер
@GetMapping("/playerAccount")
public Iterable<PlayerAccount> getPlayerAccounts(com.querydsl.core.types.Predicate predicate) {
return repository.findAll(predicate);
}
Когда я вызываю GET / playerAccount API, я получаю исключение IllegalStateException "Первичный конструктор или конструктор по умолчанию для интерфейса com.querydsl.core.types.Predicate не найден. "(брошено org.springframework.web.method.annotation.ModelAttributeMethodProcessor # createAttribute).
После некоторого (глубокого!) копания я обнаружил, что если я удалю следующую строку в моей весне. xml file:
<mvc:annotation-driven />
И если я добавлю следующую строку в мой Spring. java file:
@EnableWebMvc
, тогда проблема исчезнет.
Я действительно не понимаю не понимаю почему. Что может быть причиной этого? Я подумал, что они действительно эквивалентны (одна конфигурация основана на xml, другая - на основе Java / аннотаций).
Я прочитал эту документацию о сочетании Java и Xml конфигурация, но я не увидел там ничего релевантного.
edit:
из (нескольких) комментариев / ответов, которые я получил до сих пор, Я понимаю, что, возможно, использование Predicate в моем API - не лучший выбор.
Хотя мне бы очень хотелось понять природу ошибки, я сначала хочу обратиться к первоначальной проблеме, которую пытаюсь решить:
Допустим, у меня есть сущность MyEntity
, которая состоит из 10 разных полей (с разными именами и типами). Я хотел бы найти его легко. Если я создаю следующий (пустой) интерфейс:
public interface MyEntityRepository extends JpaRepository<MyEntity, Long>, QuerydslPredicateExecutor<MyEntity> {
}
, то без какого-либо другого кода (кроме конфигурации xml) я могу легко найти объект myEntity в базе данных.
Теперь я просто хочу предоставить эту функциональность конечной точке отдыха. И в идеале, если я добавлю новое поле к своему MyEntity
, я хочу, чтобы этот API автоматически работал с этим новым полем, как это делает MyEntityRepository
, без изменения контроллера.
Я думал, что это было цель Spring Data и хороший подход, но, пожалуйста, скажите, есть ли лучший / более распространенный способ создания API поиска для данной сущности.