You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Spring Boot 3中QueryDSL Springdoc断言与Spring Boot 2表现一致?

解决Spring Boot 3 + Springdoc 2下@QuerydslPredicate参数不生成Swagger文档的问题

1. 修正依赖配置

Springdoc 2.x(适配Spring Boot 3)的依赖结构有所调整,确保引入以下两个核心依赖,版本保持一致(建议使用与Spring Boot 3匹配的最新稳定版,比如2.2.0):

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
    <version>2.2.0</version>
</dependency>
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-data-rest</artifactId>
    <version>2.2.0</version>
</dependency>

同时确认Querydsl的JPA依赖和APT插件配置正确,保证Q类(如QBook)正常生成:

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
</dependency>

<plugin>
    <groupId>com.mysema.maven</groupId>
    <artifactId>apt-maven-plugin</artifactId>
    <version>1.1.3</version>
    <executions>
        <execution>
            <goals>
                <goal>process</goal>
            </goals>
            <configuration>
                <outputDirectory>target/generated-sources/java</outputDirectory>
                <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
            </configuration>
        </execution>
    </executions>
</plugin>

2. 启用Querydsl参数解析配置

在application.properties或application.yml中添加Springdoc的Querydsl启用配置:

springdoc.querydsl.enabled=true

3. 确保控制器注解正确

检查控制器中的@QuerydslPredicate注解是否指定了root属性,明确关联的实体类:

@GetMapping("/books")
public ResponseEntity<List<Book>> listBooks(
    @QuerydslPredicate(root = Book.class) Predicate predicate
) {
    // 业务逻辑
}

4. 额外配置(若上述步骤无效)

如果仍未生成实体字段参数,可添加自定义配置类,强制Springdoc展开Predicate参数为实体字段:

@Configuration
public class SpringDocQuerydslConfig {

    @Bean
    public ParameterCustomizer querydslParameterCustomizer(QuerydslPredicateParameterBuilder parameterBuilder) {
        return (parameterModel, methodParameter, beanParameter) -> {
            if (methodParameter.hasParameterAnnotation(QuerydslPredicate.class)) {
                // 使用Springdoc内置的参数构建器生成实体字段参数
                return parameterBuilder.buildParameters(methodParameter);
            }
            return parameterModel;
        };
    }
}

完成以上步骤后,重新启动项目,Swagger文档应该会自动生成Book实体对应的id、name、bookNumber等查询参数,而非仅显示predicate对象参数。

内容的提问来源于stack exchange,提问作者rjdkolb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:55:27