복붙노트

[SPRING] Spring MVC 애플리케이션에서 Swagger를 구현하는 '간단한'방법

SPRING

Spring MVC 애플리케이션에서 Swagger를 구현하는 '간단한'방법

ReSTFul API는 단순한 스프링으로 작성되었습니다 (스프링 부트가 없으며 멋진 것들!). 이걸로 Swagger를 구현해야합니다. 지금까지 인터넷상의 모든 페이지는 혼란스러운 구성과 내가 휴대용이 전혀없는 부풀어 오른 코드로 인해 나를 미치게 만들었습니다.

누구든지이 작업을 수행하는 데 도움이되는 샘플 프로젝트 (또는 세부 단계 집합)가 있습니까? 특히 swagger-springmvc를 사용하는 좋은 샘플을 찾고 있습니다. 나는 그것이 '샘플'을 가지고 있다는 것을 알고 있지만, 기껏해야 비의 코드가 낙심하고 있습니다.

나는 왜 "왜곡이 단순히 최고인가"를 찾고 있지 않다는 것을 분명히해야합니다. 나는 사용하고 있지 않다 (그리고 나의 현재 작업은 사용하지 않을 것이다) Spring Boot or such.

해결법

  1. ==============================

    1.Springfox는 Swagger-SpringMVC를 대체했으며 이제 Swagger 사양 1.2와 2.0을 모두 지원합니다. 구현 클래스가 변경되어 좀 더 세밀한 사용자 정의가 가능하지만 일부 작업은 가능합니다. 설명서가 개선되었지만 고급 구성을 위해 추가 된 세부 정보가 필요합니다. 1.2 구현에 대한 이전 답변은 여전히 ​​아래에서 찾을 수 있습니다.

    Springfox는 Swagger-SpringMVC를 대체했으며 이제 Swagger 사양 1.2와 2.0을 모두 지원합니다. 구현 클래스가 변경되어 좀 더 세밀한 사용자 정의가 가능하지만 일부 작업은 가능합니다. 설명서가 개선되었지만 고급 구성을 위해 추가 된 세부 정보가 필요합니다. 1.2 구현에 대한 이전 답변은 여전히 ​​아래에서 찾을 수 있습니다.

    Maven 의존성

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.5.0</version>
    </dependency> 
    

    최소 구현은 다소 비슷해 보이지만 이제는 SwaggerSpringMvcPlugin 클래스 대신 Docket 클래스를 사용합니다.

    @Configuration
    @EnableSwagger2
    public class SwaggerConfig {
    
        @Bean
        public Docket api(){
            return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.regex("/api/.*"))
                .build()
                .apiInfo(apiInfo());
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                .title("TITLE")
                .description("DESCRIPTION")
                .version("VERSION")
                .termsOfServiceUrl("http://terms-of-services.url")
                .license("LICENSE")
                .licenseUrl("http://url-to-license.com")
                .build();
        }
    
    }
    

    Swagger 2.0 API 문서는 이제 http : // myapp / v2 / api-docs에서 사용할 수 있습니다.

    Swagger UI 지원을 추가하는 것이 이제 더 쉬워졌습니다. Maven을 사용하는 경우 Swagger UI webjar에 대해 다음 종속성을 추가하십시오.

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.5.0</version>
    </dependency>
    

    Spring Boot를 사용한다면, 웹 애플리케이션은 자동으로 http : //myapp/swagger-ui.html (이전 : http : // myapp / springfox)에서 필요한 파일을 선택하고 UI를 보여 주어야합니다. Spring Boot를 사용하지 않는다면 yuriy-tumakha가 아래 답변에서 언급했듯이 파일에 대한 자원 처리기를 등록해야합니다. Java 구성은 다음과 같습니다.

    @Configuration
    @EnableWebMvc
    public class WebAppConfig extends WebMvcConfigurerAdapter {
    
        @Override 
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
            registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
        }
    
    }
    

    새로운 정적 문서 생성 기능은 나 자신을 시도하지는 않았지만 꽤 멋져 보입니다.

    Swagger-SpringMVC에 대한 설명서는 다소 혼란 스러울 수 있지만 설정하기가 실제로 매우 쉽습니다. 가장 간단한 설정은 SpringSwaggerConfig 빈을 생성하고 주석 기반 설정을 가능하게하는 것이다. (아마 Spring MVC 프로젝트에서 이미 할 것이다.)

    <mvc:annotation-driven/>
    <bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />
    

    그러나 이전 XML 정의 된 Bean 대신 SwaggerSpringMvcPlugin을 사용하여 사용자 정의 Swagger 구성을 정의하는 추가 단계를 수행하는 것이 좋습니다.

    @Configuration
    @EnableSwagger
    @EnableWebMvc
    public class SwaggerConfig {
    
        private SpringSwaggerConfig springSwaggerConfig;
    
        @SuppressWarnings("SpringJavaAutowiringInspection")
        @Autowired
        public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
            this.springSwaggerConfig = springSwaggerConfig;
        }
    
        @Bean
        public SwaggerSpringMvcPlugin customImplementation(){
    
            return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
                    .apiInfo(apiInfo())
                    .includePatterns(".*api.*"); // assuming the API lives at something like http://myapp/api
        }
    
        private ApiInfo apiInfo() {
            return new ApiInfoBuilder()
                .title("TITLE")
                .description("DESCRIPTION")
                .version("VERSION")
                .termsOfServiceUrl("http://terms-of-services.url")
                .license("LICENSE")
                .licenseUrl("http://url-to-license.com")
                .build();
        }
    
    }
    

    애플리케이션을 실행하면 http : // myapp / api-docs에 API 스펙이 작성된 것을 볼 수 있습니다. 멋진 Swagger UI를 설정하려면 GitHub 프로젝트에서 정적 파일을 복제하여 프로젝트에 넣어야합니다. 프로젝트가 정적 HTML 파일을 제공하도록 구성되었는지 확인하십시오.

    <mvc:resources mapping="*.html" location="/" />
    

    그런 다음 Swagger UI dist 디렉토리의 최상위 수준에서 index.html 파일을 편집하십시오. 파일의 맨 위에 다른 프로젝트의 api-docs URL을 나타내는 JavaScript가 있습니다. 이 항목을 편집하여 프로젝트의 Swagger 문서를 가리 킵니다.

      if (url && url.length > 1) {
        url = url[1];
      } else {
        url = "http://myapp/api-docs";
      }
    

    이제 http : //myapp/path/to/swagger/index.html로 이동하면 프로젝트에 Swagger UI 인스턴스가 표시됩니다.

  2. ==============================

    2.SpringJava Swagger UI는 WebJar 종속성 및 자원 매핑을 추가 한 후에 작동합니다. http://www.webjars.org/documentation#springmvc

    SpringJava Swagger UI는 WebJar 종속성 및 자원 매핑을 추가 한 후에 작동합니다. http://www.webjars.org/documentation#springmvc

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.5</version>
        </dependency>
    

    spring-servlet.xml :

    <mvc:resources mapping="swagger-ui.html" location="classpath:/META-INF/resources/"/>
    <mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/>
    

    또는 스프링 주석 https://github.com/springfox/springfox-demos/blob/master/spring-java-swagger/src/main/java/springfoxdemo/java/swagger/SpringConfig.java

    Swagger2를 사용하도록 설정해야합니다.

     @EnableSwagger2
     public class SwaggerConfiguration {
     }
    
  3. ==============================

    3.또한 swagger-maven-plugin을 사용하여 swagger.json을 생성하고이를 swagger-ui로 복사하는 방법을 고려해 볼 수 있습니다.

    또한 swagger-maven-plugin을 사용하여 swagger.json을 생성하고이를 swagger-ui로 복사하는 방법을 고려해 볼 수 있습니다.

    이 repo에서 스프링 MVC 주석을 사용하여 작업 플러그인의 간단한 샘플을 확인하십시오.

    https://github.com/khipis/swagger-maven-example

    또는 JAX-RS 용

    https://github.com/kongchen/swagger-maven-example

  4. from https://stackoverflow.com/questions/26720090/a-simple-way-to-implement-swagger-in-a-spring-mvc-application by cc-by-sa and MIT license