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