Spring Boot의 REST API에 Swagger 도입
15038 단어 swaggerspring-bootSpringfox
Outline
Spring Boot에서 만든 REST API에 Swagger를 도입한다.
라이브러리 추가
buildscript {
ext {
springBootVersion = '2.0.2.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
+ext {
+ springfoxSwagger2Version = '2.8.0'
+ springfoxSwaggerUiVersion = '2.8.0'
+}
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-web')
+ compile("io.springfox:springfox-swagger2:${springfoxSwagger2Version}")
+ compile("io.springfox:springfox-swagger-ui:${springfoxSwaggerUiVersion}")
runtime('mysql:mysql-connector-java')
compileOnly('org.projectlombok:lombok')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
설정 클래스 추가
各設定項目はよしなに。
SwaggerConfig.java
package com.example.springapi.swagger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.UiConfiguration;
import springfox.documentation.swagger.web.UiConfigurationBuilder;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket swaggerSpringMvcPlugin() {
return new Docket(DocumentationType.SWAGGER_2)
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.regex("/v1.*"))
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring API")
.description("Description.")
.version("0.0.1")
.contact(new Contact("name", "URL", "email"))
.license("license")
.licenseUrl("license URL")
.termsOfServiceUrl("")
.build();
}
@Bean
public UiConfiguration uiConfig() {
return UiConfigurationBuilder.builder()
.displayRequestDuration(true)
.validatorUrl("")
.build();
}
}
주의점
베이스 패스 정보
ControllerにベースパスつけないとUIが起動しない。
xxxController.java
@RequestMapping("/v1")
public class Controller {
정적 리소스에 대한 액세스를 사용하지 않도록 설정한 경우
add-mapping: falseつけちゃってるみたいな場合。
以下のように明示的にSwagger uiへのアクセスを設定する。
WebMvcConfig.java
package com.example.springapi.swagger;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/swagger-ui.html")
.addResourceLocations(this.getStaticLocations());
}
private String[] getStaticLocations() {
return new String[]{
"/",
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/",
};
}
}
ui가 표시되지만 오류가 발생합니다.
다음을 추가합니다.
SwaggerCongig.java @Bean
public UiConfiguration uiConfig() {
return UiConfigurationBuilder.builder()
.validatorUrl("")
.build();
}
확인
/swagger-ui.html을 GET하십시오.
세련된 것이 나올 것.
덤
컨트롤러나 모델에 주석을 부여하여 사용자 정의할 수 있습니다.
/**
* ユーザ検索
*
* @param id 検索したいユーザID
* @return ユーザ
*/
@ApiResponses({
@ApiResponse(code = 404, message = "Not Found", response = ErrorResponse.class),
@ApiResponse(code = 500, message = "Internal Server Error", response = ErrorResponse.class),
})
@GetMapping("{id}")
@ResponseStatus(HttpStatus.OK)
public User findById(@PathVariable("id") String id) {
return this.userService.findById(id);
}
Reference
이 문제에 관하여(Spring Boot의 REST API에 Swagger 도입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YutaKase6/items/52ea048c5352c77330eb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
buildscript {
ext {
springBootVersion = '2.0.2.RELEASE'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
+ext {
+ springfoxSwagger2Version = '2.8.0'
+ springfoxSwaggerUiVersion = '2.8.0'
+}
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-web')
+ compile("io.springfox:springfox-swagger2:${springfoxSwagger2Version}")
+ compile("io.springfox:springfox-swagger-ui:${springfoxSwaggerUiVersion}")
runtime('mysql:mysql-connector-java')
compileOnly('org.projectlombok:lombok')
testCompile('org.springframework.boot:spring-boot-starter-test')
}
설정 클래스 추가
SwaggerConfig.java
package com.example.springapi.swagger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger.web.UiConfiguration;
import springfox.documentation.swagger.web.UiConfigurationBuilder;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket swaggerSpringMvcPlugin() {
return new Docket(DocumentationType.SWAGGER_2)
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.regex("/v1.*"))
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring API")
.description("Description.")
.version("0.0.1")
.contact(new Contact("name", "URL", "email"))
.license("license")
.licenseUrl("license URL")
.termsOfServiceUrl("")
.build();
}
@Bean
public UiConfiguration uiConfig() {
return UiConfigurationBuilder.builder()
.displayRequestDuration(true)
.validatorUrl("")
.build();
}
}
베이스 패스 정보
xxxController.java
@RequestMapping("/v1")
public class Controller {
以下のように明示的にSwagger uiへのアクセスを設定する。
WebMvcConfig.java
package com.example.springapi.swagger;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/swagger-ui.html")
.addResourceLocations(this.getStaticLocations());
}
private String[] getStaticLocations() {
return new String[]{
"/",
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/",
};
}
}
@Bean
public UiConfiguration uiConfig() {
return UiConfigurationBuilder.builder()
.validatorUrl("")
.build();
}
/swagger-ui.html을 GET하십시오.
세련된 것이 나올 것.
덤
컨트롤러나 모델에 주석을 부여하여 사용자 정의할 수 있습니다.
/**
* ユーザ検索
*
* @param id 検索したいユーザID
* @return ユーザ
*/
@ApiResponses({
@ApiResponse(code = 404, message = "Not Found", response = ErrorResponse.class),
@ApiResponse(code = 500, message = "Internal Server Error", response = ErrorResponse.class),
})
@GetMapping("{id}")
@ResponseStatus(HttpStatus.OK)
public User findById(@PathVariable("id") String id) {
return this.userService.findById(id);
}
Reference
이 문제에 관하여(Spring Boot의 REST API에 Swagger 도입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/YutaKase6/items/52ea048c5352c77330eb
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
/**
* ユーザ検索
*
* @param id 検索したいユーザID
* @return ユーザ
*/
@ApiResponses({
@ApiResponse(code = 404, message = "Not Found", response = ErrorResponse.class),
@ApiResponse(code = 500, message = "Internal Server Error", response = ErrorResponse.class),
})
@GetMapping("{id}")
@ResponseStatus(HttpStatus.OK)
public User findById(@PathVariable("id") String id) {
return this.userService.findById(id);
}
Reference
이 문제에 관하여(Spring Boot의 REST API에 Swagger 도입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/YutaKase6/items/52ea048c5352c77330eb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)