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

如何在非简易Wildfly Swarm项目中正确使用Swagger?

解决Wildfly Swarm添加第二个包后Swagger失效的问题

我之前碰到过类似的场景,Wildfly Swarm集成Swagger时,默认扫描范围通常只覆盖初始的REST包,新增第二个包后没被纳入扫描范围,就会导致swagger.json无法正常生成。给你几个实用的解决办法:

1. 通过注解指定Swagger扫描包范围

在应用的启动类或者专门的Swagger配置类上,用@Scan注解明确列出所有需要扫描的包:

import io.swagger.annotations.SwaggerDefinition;
import io.swagger.annotations.Scan;

@SwaggerDefinition
@Scan(basePackages = {"ch.schlau.pesche.swagger42.rest", "你的第二个包完整路径"})
public class SwaggerConfig {
    // 无需额外代码,仅作为注解载体
}

这样Swagger就会同时扫描两个包下的REST端点和Swagger注解。

2. 通过配置文件扩展扫描范围

如果使用Wildfly Swarm的swagger fraction,也可以在project-defaults.yml或swarm.yml里配置扫描包:

swarm:
  swagger:
    scan:
      packages:
        - ch.schlau.pesche.swagger42.rest
        - 你的第二个包完整路径

这种方式不用修改代码,配置更灵活。

3. 检查新包下REST类的Swagger注解

有时候不是扫描问题,而是新包下的REST类没添加Swagger识别所需的注解。记得给新类和方法加上对应的注解,比如:

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/new-api")
@Api(tags = "新增接口组")
public class NewRestEndpoint {

    @GET
    @ApiOperation(value = "获取测试数据", notes = "返回新接口的测试响应")
    public String getTestData() {
        return "Hello from new package!";
    }
}

4. 验证JAX-RS应用的资源注册

如果项目里有自定义的Application类,要确保它注册了所有包下的REST资源:

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

@ApplicationPath("/api")
public class RestApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<>();
        // 添加所有REST类,或确保包扫描覆盖到新包
        classes.add(HelloWorldEndpoint.class);
        classes.add(NewRestEndpoint.class);
        return classes;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:40:37