【问题标题】:spring boot application configuration for JaxRs based Swagger基于 JaxRs 的 Swagger 的 Spring Boot 应用程序配置
【发布时间】:2014-05-07 01:45:40
【问题描述】:

有没有例子可以为Swagger配置spring boot+Jersey+JaxRs应用?

参考this 帖子,我的应用中有以下代码,无法调出招摇的用户界面,也无法使用

列出资源
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

【问题讨论】:

    标签: jax-rs spring-boot swagger swagger-ui jersey-1.0


    【解决方案1】:

    我能够让它工作,但我不确定 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>
    

    【讨论】:

    • 谢谢回复。我现在不能使用 Jersey 2。我必须让它与 Jersey 1.16 一起工作
    【解决方案2】:

    这是一个使用 Jersey 2 的 Spring Boot 应用示例:http://raibledesigns.com/rd/entry/a_webapp_makeover_with_spring

    【讨论】:

    • thnx 为例。但我使用的是 Jersey 1.16 而不是 Jersey-2
    • 这与 Swagger 无关
    猜你喜欢
    • 1970-01-01
    • 2014-02-10
    • 2017-11-04
    • 2017-08-26
    • 2021-02-15
    • 2022-12-23
    • 1970-01-01
    • 2016-06-12
    • 2015-05-20
    相关资源
    最近更新 更多