基于JaxRs的Swagger的Spring Boot应用程序配置

3

有没有关于配置Spring Boot+Jersey+JaxRs应用程序的Swagger的示例可用?

参考这篇文章,我在我的应用程序中有以下代码,但无法启动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.class, "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 = "关于实体详情的操作")
@CompileStatic
class EntityDetailsResource {
..
}

[编辑]. 我正在使用Jersey 1.16,由于应用程序影响,无法使用Jersey 2

2个回答

2

感谢提供示例。但我正在使用的是Jersey 1.16而不是Jersey-2。 - suman j
3
那与 Swagger 没有关系。 - user3748908

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,但如果你想坚持使用原始的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>

谢谢回复。我现在不能使用Jersey 2,必须使用Jersey 1.16来解决这个问题。 - suman j

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接