是否有为 Swagger 配置 spring boot+Jersey+JaxRs 应用程序的示例?
引用this帖子,我的应用程序中有以下代码,无法调出 swagger UI,也无法使用
列出资源http://localhost:8080/api/root/{funcId}/entities
.
ApplicationInitializer 类:(Groovy)
@Configuration
@EnableAutoConfiguration
class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run( Application.class, args)
}
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources( Application, "classpath:/META-INF/com/company/automation/functionality/bootstrap.xml");
}
@Bean
ServletRegistrationBean jerseyServlet() {
ServletRegistrationBean registration = new ServletRegistrationBean(new SpringServlet());
Map params = ["com.sun.jersey.config.property.packages":"com.company.automation.functionality.impl;com.wordnik.swagger.jersey.listing"]
registration.setInitParameters(params)
return registration;
}
@Bean
ServletRegistrationBean jerseyJaxrsConfig() {
ServletRegistrationBean registration = new ServletRegistrationBean(new JerseyJaxrsConfig());
Map params = ["swagger.api.basepath":"http://localhost:8080/api", "api.version":"1.0"]
registration.setInitParameters(params)
return registration;
}
}
资源:
@Component
@Path('root/{funcId}/entities')
@Api (value = "root/{funcId}/entities", description = "Operations about entity Details")
@CompileStatic
class EntityDetailsResource {
..
}
[编辑]。我正在使用 Jersey 1.16,由于应用程序的影响无法使用 Jersey 2
最佳答案
我能够让它工作,但我不确定 Jersey 1.x 中的 Spring 支持有多好,所以我用 2.7 做到了(你发布的链接是针对 JAX-RS 1.x 的)。这有效:
@Configuration
@ComponentScan
@EnableAutoConfiguration
@Path("/")
@Api(value = "home", description = "Demo API")
public class Application extends ResourceConfig implements CommandLineRunner {
@GET
@ApiOperation(value = "Get Greeting", notes = "Returns greeting")
public String home() {
return "Hello";
}
@Override
public void run(String... args) throws Exception {
SwaggerConfig config = ConfigFactory.config();
config.setBasePath("http://localhost:8080/");
config.setApiVersion("1.0.0");
ScannerFactory.setScanner(new DefaultJaxrsScanner());
ClassReaders.setReader(new JerseyApiReader());
}
public Application() {
register(Application.class);
packages("com.wordnik.swagger.jersey.listing");
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
它使用 spring-boot-jersey ,这是实验性的,用于创建 Jersey servlet,但如果您想坚持使用 vanilla Boot,您可以使用 ServletRegistration
@Bean
轻松完成此操作。
我必须固定 Jersey 版本并添加一些排除项。这是我的依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>com.wordnik</groupId>
<artifactId>swagger-jersey2-jaxrs_2.10</artifactId>
<version>1.3.2</version>
<exclusions>
<exclusion>
<artifactId>jsr311-api</artifactId>
<groupId>javax.ws.rs</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-jersey</artifactId>
<version>1.0.0.BUILD-SNAPSHOT</version>
</dependency>
</dependencies>
关于jax-rs - 基于 JaxRs 的 Swagger 的 spring boot 应用程序配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22698575/