Dropwizard集成Swagger报错:需提供SwaggerBundleConfiguration实例
解决Dropwizard集成Swagger时的
IllegalStateException问题 这个错误的核心原因是:你的应用没有正确向SwaggerBundle提供SwaggerBundleConfiguration实例。下面是一步步的修复方案:
1. 更新你的HelloWorldConfiguration类
你需要在配置类中添加SwaggerBundleConfiguration类型的属性,让Dropwizard能从配置文件中加载Swagger的相关配置。记得加上@JsonProperty、@Valid和@NotNull注解来保证配置的合法性:
import io.dropwizard.Configuration; import com.smoketurner.dropwizard.swagger.SwaggerBundleConfiguration; import com.fasterxml.jackson.annotation.JsonProperty; import javax.validation.Valid; import javax.validation.constraints.NotNull; public class HelloWorldConfiguration extends Configuration { // 保留你原有的配置字段(比如数据库、服务器端口等) @Valid @NotNull @JsonProperty("swagger") private SwaggerBundleConfiguration swaggerBundleConfiguration; // Getter和Setter方法 public SwaggerBundleConfiguration getSwaggerBundleConfiguration() { return swaggerBundleConfiguration; } public void setSwaggerBundleConfiguration(SwaggerBundleConfiguration swaggerBundleConfiguration) { this.swaggerBundleConfiguration = swaggerBundleConfiguration; } }
2. 在HelloWorldApplication中正确注册SwaggerBundle
在应用的initialize方法里,注册SwaggerBundle时,必须通过重写getSwaggerBundleConfiguration方法,从你的应用配置中传递Swagger的配置实例:
import io.dropwizard.Application; import io.dropwizard.setup.Bootstrap; import io.dropwizard.setup.Environment; import com.smoketurner.dropwizard.swagger.SwaggerBundle; import com.smoketurner.dropwizard.swagger.SwaggerBundleConfiguration; public class HelloWorldApplication extends Application<HelloWorldConfiguration> { public static void main(String[] args) throws Exception { new HelloWorldApplication().run(args); } @Override public String getName() { return "hello-world"; } @Override public void initialize(Bootstrap<HelloWorldConfiguration> bootstrap) { // 注册Swagger Bundle bootstrap.addBundle(new SwaggerBundle<HelloWorldConfiguration>() { @Override protected SwaggerBundleConfiguration getSwaggerBundleConfiguration(HelloWorldConfiguration configuration) { // 关键:从应用配置中获取Swagger配置 return configuration.getSwaggerBundleConfiguration(); } }); // 其他初始化操作(比如注册其他Bundle) } @Override public void run(HelloWorldConfiguration configuration, Environment environment) { // 注册你的API资源、健康检查等逻辑 } }
3. 在配置文件中添加Swagger基础配置
最后,你需要在Dropwizard的配置文件(比如config.yml)中添加Swagger的必要配置,至少要指定你的API资源所在的包路径,这样Swagger才能扫描并生成文档:
# 保留你原有的配置(比如server、logging等) swagger: resourcePackage: com.example.helloworld.resources # 替换成你的API资源所在包 title: "Hello World API" version: "1.0.0" description: "一个集成Swagger的Hello World示例API"
完成以上三步后,重新运行你的应用,应该就能正常启动并访问Swagger UI了(默认路径是/swagger)。
内容的提问来源于stack exchange,提问作者Ben Parker
相关产品推荐
相关产品推荐

