SpringBoot 통합 swagger-ui 및 swagger 그룹 디 스 플레이 동작

안녕하세요,이 글 은 springboot 프로젝트 에 swagger-ui 를 통합 하 는 방법 을 보 여 줍 니 다.어떤 사람 은 이것 이 모두 상투적인 말 이 라 고 말 하 는데,인터넷 의 예 는 헤 아 릴 수 없 이 많다.확실히 swagger 가 태 어 난 지 오래 되 었 지만 사용 과정 에서 문제 가 생 겼 습 니 다.제 사용 소감 을 공유 해 드 리 겠 습 니 다.
1.swagger 설정 클래스
첫 번 째 단 계 는 pom 에 해당 하 는 설정 을 도입 해 야 합 니 다.여 기 는 2.7.0 버 전 을 사용 합 니 다.주의해 야 할 것 은 2.7.0 과 2.8.0 의 버 전 은 인터페이스 스타일 에 있어 차이 가 매우 크다 는 것 이다.관심 이 있 으 면 2.8.0 이상 의 버 전 을 사용 해 보 자.나 는 2.7.0 과 이하 의 버 전 을 비교적 선 호한 다.왜냐하면 화면 이 비교적 상쾌 하기 때문이다.
첫 번 째 pom 도입

<!--swagger-->
<dependency>
 <groupId>io.springfox</groupId>
 <artifactId>springfox-swagger2</artifactId>
 <version>2.7.0</version>
</dependency>
<dependency>
 <groupId>io.springfox</groupId>
 <artifactId>springfox-swagger-ui</artifactId>
 <version>2.7.0</version>
</dependency>
두 번 째 단계
코드 에 해당 하 는 설정 을 추가 합 니 다.새 config 패 키 지 를 만 들 고 swaggerConfig 설정 류 를 기록 합 니 다.

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.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

 /**
  *   API  
  * apiInfo()   API    
  *   select()      ApiSelectorBuilder  ,           Swagger   ,
  *                     API   。
  *
  * @return
  */
 @Bean
 public Docket restApi() {
  return new Docket(DocumentationType.SWAGGER_2)
    .groupName("    ")
    .apiInfo(apiInfo("Spring Boot   Swagger2  RESTful APIs", "1.0"))
    .useDefaultResponseMessages(true)
    .forCodeGeneration(false)
    .select()
    .apis(RequestHandlerSelectors.basePackage("com.xqnode.learning.controller"))
    .paths(PathSelectors.any())
    .build();
 }

 /**
  *    API     (               )
  *     :http://ip:port/swagger-ui.html
  *
  * @return
  */
 private ApiInfo apiInfo(String title, String version) {
  return new ApiInfoBuilder()
    .title(title)
    .description("     : https://jb51.net")
    .termsOfServiceUrl("https://jb51.net")
    .contact(new Contact("xqnode", "https://jb51.net", "[email protected]"))
    .version(version)
    .build();
 }
}
.apis(RequestHandler Selectors.basePackage("com.xqnode.learning.controller")이 설정 은 인터페이스 층 의 위 치 를 지정 하 는 데 사 용 됩 니 다.프로젝트 의 실제 상황 에 따라 수정 할 수 있 습 니 다.api Info()는 우리 프로젝트 의 설명 정 보 를 정의 하 는 것 으로 실제 수요 에 따라 매개 변수 에서 수정 할 수 있 습 니 다.주의해 야 할 것 은 설정 클래스 의 머리 에@Configuration,성명 설정 클래스,@Enableswagger 2 에 swagger 를 불 러 오 는 관련 설정 을 추가 해 야 합 니 다.
2.swagger 사용
우 리 는 방금 지정 한 인터페이스 층 에서 swagger 를 사용 하여 인터페이스의 사용 방법 을 설명 했다.

import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.io.IOException;
import java.util.Map;

@RestController
@RequestMapping("/api")
@Api(tags = "      ")
public class ApiController {
 @Resource
 private ObjectMapper mapper;

 @PostMapping("/ps")
 @ApiOperation(value = "  json  ", notes = "  json        ")
 public String post(@ApiParam(name = "  json  ", defaultValue = "{}")
       @RequestBody String json) throws IOException {
  Map map = mapper.readValue(json, Map.class);
  System.out.println(map);
  return json;
 }
}

그리고 프로젝트 를 시작 해서 열 겠 습 니 다.http://ip:port/swagger-ui.html:

인 자 를 입력 하지 않 고 try it out 을 누 르 십시오!단추:

페이지 에서 우 리 는 인터페이스의 머리 에 지정 한 인터페이스 클래스 설명(@Api)과 인터페이스 방법 에 지정 한 방법 설명(@Api Operation)을 볼 수 있 습 니 다.인터페이스 매개 변수 에 지정 한 매개 변수 설명(@Apiparam)이 모두 효력 이 발생 했 습 니 다.이것 은 모두 swagger 를 바탕 으로 이 루어 진 것 입 니 다.그러나 주의해 야 할 것 은 swagger 는 인터페이스의 설명 정 보 를 제공 할 수 밖 에 없습니다.
3.추가 학습 경험
제 가 swagger 를 사용 할 때 필요 한 것 이 이 렇 습 니 다.저 는 두 개의 인터페이스 층 에서 모두 swagger 를 사용 해 야 합 니 다.두 개의 인터페이스 층 의 api 를 그룹 으로 나 누 어 보 여 드릴 것 입 니 다.예 를 들 어 아래 두 개의 인터페이스 층:

프로젝트 를 시작 한 후 swagger 페이지 를 방 문 했 는데 이상 한 문제 가 있 습 니 다.바로 other 층 의 인터페이스 가 보이 지 않 습 니 다.

내 가 설정 클래스 에서 지정 한 인터페이스 층 위치 가 swagger api 의 표시 에 영향 을 미 쳤 기 때 문 이 라 고 추측 합 니 다.그래서 바 이 두 는 해결 방안 을 찾 았 습 니 다.인터페이스 층 의 위 치 를 지정 하지 않 고 주 해 를 지정 한@RestController 입 니 다.

@Bean
 public Docket restApi() {
  return new Docket(DocumentationType.SWAGGER_2)
    .groupName("standard")
    .apiInfo(apiInfo("Spring Boot   Swagger2  RESTful APIs", "1.0"))
    .useDefaultResponseMessages(true)
    .forCodeGeneration(false)
    .select()
//    .apis(RequestHandlerSelectors.basePackage("com.xqnode.learning.controller"))
    .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
    .paths(PathSelectors.any())
    .build();
 }
swagger 인터페이스 에 다른 인터페이스의 api 가 나 타 났 습 니 다:

하지만 이런 효 과 는 좋 지 않다.우리 가 왜 인터페이스 에 층 을 나 누 어야 하 는 지 생각해 보 세 요.업 무 를 격 리 시 키 기 위해 서 아 닙 니까?이렇게 한 인터페이스 에 두 개의 인터페이스 층 의 api 가 나타 나 면 우리 가 인 터 페 이 스 를 찾 는 데 매우 불편 하고 우리 가 인터페이스 층 을 나 누 는 목적 도 어 지 럽 혔 습 니 다.그렇다면 이 를 어떻게 격 리 시 킬 수 있 을 까?
사실은 매우 간단 합 니 다.우 리 는 Docket 의 bean 을 다시 정의 하고 그 중에서 다른 인터페이스 층 의 위 치 를 지정 하면 됩 니 다.

@Bean
 public Docket restApi2() {
  return new Docket(DocumentationType.SWAGGER_2)
    .groupName("    ")
    .apiInfo(apiInfo("Other APIs", "2.0"))
    .select()
    .apis(RequestHandlerSelectors.basePackage("com.xqnode.learning.other"))
    .paths(PathSelectors.regex("/other.*"))
    .build();
 }
우 리 는 여기에서 두 번 째 인터페이스 층 의 위 치 를 지정 하고 경로 접 두 사 를 지정 했다.그러면 우 리 는 swagger 페이지 에서 그 안의 인 터 페 이 스 를 쉽게 찾 을 수 있다.
인터페이스 층 1:표준 인터페이스

인터페이스 층 2:기타 인터페이스

이제 우 리 는 그룹 전환 을 통 해 우리 가 주목 하 는 인터페이스 층 의 api 를 찾 을 수 있 습 니 다.
다음 에 완전한 설정 클래스 를 붙 입 니 다:

@Configuration
@EnableSwagger2
public class SwaggerConfig {

 /**
  *   API  
  * apiInfo()   API    
  *   select()      ApiSelectorBuilder  ,           Swagger   ,
  *                     API   。
  *
  * @return
  */
 @Bean
 public Docket restApi() {
  return new Docket(DocumentationType.SWAGGER_2)
    .groupName("standard")
    .apiInfo(apiInfo("Spring Boot   Swagger2  RESTful APIs", "1.0"))
    .useDefaultResponseMessages(true)
    .forCodeGeneration(false)
    .select()
    .apis(RequestHandlerSelectors.basePackage("com.xqnode.learning.controller"))
//    .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
    .paths(PathSelectors.regex("/api.*"))
    .build();
 }

 @Bean
 public Docket restApi2() {
  return new Docket(DocumentationType.SWAGGER_2)
    .groupName("    ")
    .apiInfo(apiInfo("Other APIs", "2.0"))
    .select()
    .apis(RequestHandlerSelectors.basePackage("com.xqnode.learning.other"))
    .paths(PathSelectors.regex("/other.*"))
    .build();
 }

 /**
  *    API     (               )
  *     :http://ip:port/swagger-ui.html
  *
  * @return
  */
 private ApiInfo apiInfo(String title, String version) {
  return new ApiInfoBuilder()
    .title(title)
    .description("     : https://jb51.net")
    .termsOfServiceUrl("https://jb51.net")
    .contact(new Contact("xqnode", "https://jb51.net", "[email protected]"))
    .version(version)
    .build();
 }
}

이로써 springboot 통합 swagger 2 가 완성 되 었 고 한 가지 식 사 를 추가 하 였 습 니 다.만족 하 시 죠?하하.
이상 의 SpringBoot 통합 swagger-ui 및 swagger 그룹 디 스 플레이 작업 은 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 하 시기 바 랍 니 다.여러분 들 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기