当前位置: 首页 > 知识库问答 >
问题:

带Spring Boot的NoSuchMethodException QueryDSL&Spring Data Mongo

仲孙钊
2023-03-14

我试图在我的Spring Boot2.0.4.Release应用程序上实现查询DSL,该应用程序使用Spring Data Mongo2.0.4.Release&Gradle4.10。我正在使用Spring工具套件在本地运行它。

我从包括Spring数据文档在内的多个来源中找到了以下步骤:

    null
    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']

    null
    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

  • 之后,更新了repository注释接口,如下所示。注意:我还将片段存储库FragmentOrderRepository用于一些自定义查询。
    public interface OrderRepository<D extends OrderDAO>
            extends EntityRepository<D>, PagingAndSortingRepository<D, String>, FragmentOrderRepository<D>, QuerydslPredicateExecutor<D> {}

  • 然后在controller中创建了get映射,如下所示

    @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);
        }
    }

  • 然后在我的runner类中添加了EnableSpringDataWebSupport注释
    @SpringBootApplication
    @EnableSpringDataWebSupport
    public class SampleApp {
        public static void main(String[] args) {
            SpringApplication.run(SampleApp.class, args);
        }
    }

似乎没有将参数解析为类型。

---更新09/19/19----

在调试时,我发现一个类HandlerMethodArgumentResolverComposite,它从ArgumentResolver列表中为给定的MethodParameter查找ArgumentResolver(类型为HandlerMethodArgumentResolver。此列表不包含QueryDSLPredicatearGumentResolver。因此,它不能解决这些参数。

共有1个答案

宋成天
2023-03-14

发现我所做的错误,是在我的配置注释类上缺少enableWebMVC注释。详细信息在本文档中。

 类似资料:
  • 有没有办法绕过授权?

  • 我正在尝试将vaadin与spring(没有Spring Boot)和基于java注释的spring部分配置结合起来。 自动连接似乎适用于vaadin ui部分,但不适用于“自定义ui类”(例如,“公共类LoginScreen扩展自定义组件”)。我在SysOut上得到一个NPE或一个空对象。 此外,我注意到“@ComponentScan(base Packages={"net.myapp"})”没

  • 首先要说的是,我一直在寻找解决方案,现在我非常绝望。 当由Spring Boot运行时,我无法从html页面访问css文件。 html。文件 应用JAVA 文件夹结构: 我尝试过将文件夹放入文件夹和/或删除addResourcesHandler,通过相对路径引用css和其他一些东西。似乎没有什么能解决这个问题。请告诉我,如果你试图解决这个问题,但没有找到解决方案,这样我就知道,我不会被忽视。

  • 我将使用Ehcache和Springboot。我只是想知道在处理大量请求时,什么会是最佳配置。 在直播期间,我们可能会收到超过30000 req/h。虽然在开发中,我们无法生成此方案。 你能帮我如何计算内存,以创建一个最佳配置,应在Prod中完美工作。 我检查了Postman中的响应大小,在Dev中为3-5 kb,因此我保留了以下配置,但不确定它会有多好。我们的内存大小为2GB(在prod中,我们

  • 问题内容: 我必须在SpringBoot应用程序中使用@PathValiable从URL获取参数。这些参数通常带有 斜线 。我无法控制用户在URL中输入的内容,因此我想获取他输入的内容,然后我就可以对其进行处理。 我已经在这里浏览过材料和答案,我认为对我而言,好的解决方案不是要求用户以某种方式对输入的参数进行编码。 SpringBoot代码很简单: 因此,URL如下所示: 问题在于,参数 modu

  • 我尝试使用bytebuddy在springboot中实现aop。代码如下: springboot的监听器如下: 最后,在springboot启动中注册侦听器: 当我启动应用程序时,调试记录器显示良好。然而,当请求被处理时,aop不起作用。我做错了什么?我很困惑。。。

  • 我必须在SpringBoot应用程序中使用@PathValiable从URL获取参数。这些参数通常有斜线。我没有一个关于用户将输入URL的控制,所以我想要得到他输入的内容,然后我可以处理它。 我已经看过了这里的资料和答案,我不认为对我来说,好的解决方案是要求用户以某种方式编码输入参数。