Spring boot NoSuchMethodException QueryDSL带弹簧靴&;Spring数据Mongo

Spring boot NoSuchMethodException QueryDSL带弹簧靴&;Spring数据Mongo,spring-boot,gradle,spring-data-mongodb,querydsl,Spring Boot,Gradle,Spring Data Mongodb,Querydsl,我正在尝试在我的Spring Boot2.0.4.RELEASE应用程序上实现查询DSL,该应用程序使用Spring Data Mongo2.0.4.RELEASE&Gradle4.10。 我使用Spring工具套件在本地运行它 我从多个来源(包括Spring数据文档)找到了以下步骤: 创建了gradle/querydsl.gradle,其中包含以下内容以生成Q类 从mainbuild.gradle调用上面的gradle文件,如下所示 在此之后,更新了存储库注释界面,如下所示。注意:我

我正在尝试在我的Spring Boot
2.0.4.RELEASE
应用程序上实现查询DSL,该应用程序使用Spring Data Mongo
2.0.4.RELEASE
&Gradle
4.10
。 我使用Spring工具套件在本地运行它

我从多个来源(包括Spring数据文档)找到了以下步骤:

  • 创建了
    gradle/querydsl.gradle
    ,其中包含以下内容以生成
    Q
  • 从main
    build.gradle
    调用上面的gradle文件,如下所示
  • 在此之后,更新了
    存储库
    注释界面,如下所示。注意:我还使用FragmentOrderRepository进行一些自定义查询
  • 然后,在我的runner类中,我添加了
    启用SpringDataWebSupport
    注释
有了这个,我的应用程序启动时没有任何错误,但当我尝试点击路径
http://localhost:5057/orders/dsl?email=test@test.com

我得到一个
NoSuchMethodException
,消息是
找不到接口com.querydsl.core.types.Predicate的主构造函数或默认构造函数

有人能帮我提出一些解决这个问题的建议吗

似乎参数没有解析为类型

----19年9月19日更新----

调试时,我发现一个类
HandlerMethodArgumentResolverComposite
,它从ArgumentResolver列表(类型为
HandlerMethodArgumentResolver
)中查找给定
MethodParameter
的ArgumentResolver。此列表不包含
QueryDSLDPredicateArgumentResolver
。因此,它无法解决这些论点

这意味着没有调用为
谓词
类型添加上述解析程序的
QuerydslWebConfiguration
,这反过来表明某些自动配置没有发生


可能我缺少了一些注释。

发现了我所犯的错误,在我的
配置
注释类上缺少
EnableWebMvc
注释。
详细信息在文档中。

发现了我所犯的错误,在我的
配置
注释类上缺少
EnableWebMvc
注释。 详情见文件

    apply plugin: "com.ewerk.gradle.plugins.querydsl"

    sourceSets {
        main {
            java {
                srcDir "$buildDir/generated/source/apt/main"
            }
        }
    }

    querydsl {
        springDataMongo = true
        querydslSourcesDir = "$buildDir/generated/source/apt/main"
    }

    dependencies {
        compile "com.querydsl:querydsl-mongodb:4.1.4"
        compileOnly "com.querydsl:querydsl-apt:4.1.4"
    }

    sourceSets.main.java.srcDirs = ['src/main/java']

    buildscript {

        ext { springBootVersion = "2.0.4.RELEASE" }

        repositories { mavenCentral() }

        dependencies {
            classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
            classpath "gradle.plugin.com.ewerk.gradle.plugins:querydsl-plugin:1.0.9"
        }
    }

    plugins {
        id "java"
        id "eclipse"
        id "org.springframework.boot" version "2.0.4.RELEASE"
        id "io.spring.dependency-management" version "1.0.6.RELEASE"
    }

    sourceCompatibility = 1.8

    repositories { mavenCentral() }

    dependencies {
        ...
        compile("org.springframework.boot:spring-boot-starter-web:${springBootVersion}")
        compile("org.springframework.boot:spring-boot-starter-data-mongodb:${springBootVersion}")
        ...
    }

    apply from: 'gradle/querydsl.gradle'

    /* Added this because Eclipse was not able to find generated classes */
    sourceSets.main.java.srcDirs = ['build/generated/source/apt/main','src/main/java']

    compileJava.dependsOn processResources
    processResources.dependsOn cleanResources

    public interface OrderRepository<D extends OrderDAO>
            extends EntityRepository<D>, PagingAndSortingRepository<D, String>, FragmentOrderRepository<D>, QuerydslPredicateExecutor<D> {}


    @RestController
    public class OrderController {
        @GetMapping(value="/orders/dsl", produces = { "application/json" })
        public ResponseEntity<List> getOrdersDSL(@QuerydslPredicate(root = OrderDAO.class) Predicate predicate, Pageable pageable, @RequestParam final MultiValueMap<String, String> parameters) {
            return (ResponseEntity<List>) orderService.getTools().getRepository().findAll(predicate, pageable);
        }
    }

    @SpringBootApplication
    @EnableSpringDataWebSupport
    public class SampleApp {
        public static void main(String[] args) {
            SpringApplication.run(SampleApp.class, args);
        }
    }