Spring MVC 애플리케이션에서 Swagger를 구현하는 '간단한' 방법
ReSTFul API는 심플한 Spring으로 작성되어 있습니다(Spring Boot, fancy한 것은 없습니다.스웨거를 이 일에 투입해야겠어지금까지 인터넷상의 모든 페이지는, 휴대성이 전혀 없는 혼란스러운 설정과 비대해진 코드 때문에, 나를 미치게 했다.
이 작업을 수행할 수 있는 샘플 프로젝트(또는 일련의 세부 절차)를 가지고 계신 분 계십니까?특히 swagger-springmvc를 사용한 좋은 샘플을 찾고 있습니다.나는 그것이 '샘플'을 가지고 있다는 것을 알지만, 기껏해야 난해한 코드는 실망스럽다.
나는 "왜 스웨거가 최고인가"를 찾는 것이 아님을 분명히 해야겠다.현재 작업에서는 스프링 부트 등을 사용하지 않습니다(또한 현재 작업에서는 사용하지 않습니다).
Springfox(스위거 사양 2.0, 현재)
Springfox는 Swagger-SpringMVC를 대체하여 Swagger 사양 1.2와 2.0을 모두 지원합니다.구현 클래스가 변경되어 보다 상세한 커스터마이즈가 가능하지만 작업이 일부 필요합니다.설명서는 개선되었지만 고급 구성을 위해 몇 가지 세부 정보를 추가해야 합니다.1.2 구현에 대한 오래된 답변은 다음과 같습니다.
메이븐 의존성
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.5.0</version>
</dependency>
은 거의, 는 「」, 「」를 하고 있습니다.Docket
""가 "" SwaggerSpringMvcPlugin
링크:
@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 가 Swagger 2.0 API에서 됩니다.http://myapp/v2/api-docs
.
주의: Spring 부트를 사용하지 않는 경우 잭슨 데이터베이스 의존관계를 추가해야 합니다.springfox는 데이터 바인딩에 잭슨을 사용하니까
이제 Swagger UI 지원을 추가하는 것이 더욱 쉬워졌습니다.Maven을 사용하는 경우 Swagger UI 웹jar에 대해 다음과 같은 종속성을 추가합니다.
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.5.0</version>
</dependency>
Boot을 웹 으로 필요한 하여 Spring Boot에서 합니다.http://myapp/swagger-ui.html
(구:http://myapp/springfox
Spring Boot 를 사용하지 않는 경우는, 다음의 회답에 기재되어 있듯이, 파일의 자원 핸들러를 등록할 필요가 있습니다.자바
@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(Swagger 사양 1.2 이전 버전)
Swagger-SpringMVC의 설명서는 다소 혼란스러울 수 있지만, 실제로 셋업은 매우 간단합니다.가장 간단한 설정에서는SpringSwaggerConfig
bean 및 주석 기반 구성 활성화(Spring MVC 프로젝트에서 이미 수행했을 수 있음):
<mvc:annotation-driven/>
<bean class="com.mangofactory.swagger.configuration.SpringSwaggerConfig" />
단, 커스텀 Swagger 설정을 정의하는 추가 절차를 밟는 것은 충분히 가치가 있다고 생각합니다.SwaggerSpringMvcPlugin
이전 XML 정의 bean 대신 다음과 같이 입력합니다.
@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();
}
}
응용 프로그램을 실행하면 API 사양이 다음과 같이 생성됩니다.http://myapp/api-docs
화려한 Swagger UI를 설정하려면 GitHub 프로젝트에서 정적 파일을 복제하여 프로젝트에 넣어야 합니다.프로젝트가 정적 HTML 파일을 처리하도록 구성되어 있는지 확인합니다.
<mvc:resources mapping="*.html" location="/" />
그런 다음,index.html
Swagger UI의 최상위 레벨에 있는 파일dist
디렉토리로 이동합니다.파일 맨 위에는 다음 파일을 참조하는 JavaScript가 표시됩니다.api-docs
다른 프로젝트의 URL입니다.프로젝트의 Swagger 문서를 참조하려면 다음을 편집하십시오.
if (url && url.length > 1) {
url = url[1];
} else {
url = "http://myapp/api-docs";
}
다음 페이지로 이동하면http://myapp/path/to/swagger/index.html
프로젝트의 Swagger UI 인스턴스가 표시됩니다.
Springfox 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 {
}
swagger-maven-plugin을 사용하여 swagger.json을 생성하고 정적 swagger-ui에 복사할 수도 있습니다.
다음 리포트에서 스프링 MVC 주석을 사용하여 작동하는 플러그인의 간단한 샘플을 확인하십시오.
https://github.com/khipis/swagger-maven-example
또는 JAX-RS의 경우
https://github.com/kongchen/swagger-maven-example
언급URL : https://stackoverflow.com/questions/26720090/a-simple-way-to-implement-swagger-in-a-spring-mvc-application
'programing' 카테고리의 다른 글
WP REST API가 게시 유형에서 게시물을 가져옵니다. (0) | 2023.03.19 |
---|---|
Oracle 스토어드 프로시저에서 "현황"과 "현황"의 차이점은 무엇입니까? (0) | 2023.03.19 |
Flyway가 Spring Boot에서 작동하지 않을 때 디버깅하는 방법 (0) | 2023.03.19 |
reactjs 컴포넌트에서 "key" 속성에 액세스하는 방법 (0) | 2023.03.19 |
Wordpress의 부하가 높을 때 MySQL이 정기적으로 행업합니다. (0) | 2023.03.19 |