Spring Boot Swagger 3.0.0 적용하기 (스프링부트 2.2 이상 필요)
Swagger ?
간단히 말하자면 API 문서를 자동으로 만들어주는 라이브러리임 https://swagger.io/
예시는 스웨거의 Live Demo 참조 (https://petstore.swagger.io/)
완전 기본적인 적용방법에 대해서만 다룸.
- 단순 문서 뿐 아니라 API를 문서내에서 parameter를 넣어가며 바로바로 실행 해볼 수 있음.
- rest api 제작 후 따로 테스트 페이지나 postman으로 실행해보는 대신 swagger 문서 만들어서 실행 가능.
- 복잡하지 않은 시스템이라면 rest api 서버에 swagger를 적용시켜두고, 해당 api를 호출하는 작업자에게 뭐 복잡하게 설명하고 문서 만들 것 없이 swagger 문서 url만 보내서 알아서 작업하게 할 수 있음.
스프링부트에 Swagger 적용
1.
Gradle 추가
implementation 'io.springfox:springfox-boot-starter:3.0.0'
implementation 'io.springfox:springfox-swagger-ui:3.0.0'
Maven 추가
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
2. 설정 클래스 (스프링 @Configuration 어노테이션 사용)
- '.basePackage()' 부분에 Swagger를 적용할 패키지 지정. 해당 패키지 이하의 모든 rest api가 자동으로 swagger 문서로 생성됨. (이하 예시에서는 'com.nahwasa.iot.controller' 패키지 이하를 모두 적용)
@Configuration
@EnableWebMvc
public class SwaggerConfig {
private ApiInfo swaggerInfo() {
return new ApiInfoBuilder().title("IoT API")
.description("IoT API Docs").build();
}
@Bean
public Docket swaggerApi() {
return new Docket(DocumentationType.SWAGGER_2)
.consumes(getConsumeContentTypes())
.produces(getProduceContentTypes())
.apiInfo(swaggerInfo()).select()
.apis(RequestHandlerSelectors.basePackage("com.nahwasa.iot.controller"))
.paths(PathSelectors.any())
.build()
.useDefaultResponseMessages(false);
}
private Set<String> getConsumeContentTypes() {
Set<String> consumes = new HashSet<>();
consumes.add("application/json;charset=UTF-8");
consumes.add("application/x-www-form-urlencoded");
return consumes;
}
private Set<String> getProduceContentTypes() {
Set<String> produces = new HashSet<>();
produces.add("application/json;charset=UTF-8");
return produces;
}
}
이 때, 해당 패키지 내에 포함되지만 Swagger 문서로 만들고 싶지 않을 경우 (예를들어 테스트용 컨트롤러나 api 작업자에게 보이기 싫은 api 등) 해당 컨트롤러에 @ApiIgnore 어노테이션을 추가하여 제외시킬 수 있음.
@Controller
@ApiIgnore
@RequestMapping("/")
public class IoTDevTestController extends IoTBaseController {
...
3. 문서상에 띄울 api별 설명 작성
@ApiOperation(value="AI 전기방식 동작여부 확인", notes="시스템에 등록된 현재 AI 전기방식 상태값 리턴(state:'Y' or 'N'). '../set-state'가 일정 시간 호출되지 않을 경우 N을 리턴.")
@ApiResponses({
@ApiResponse(code = 200, message = "API 정상 작동"),
@ApiResponse(code = 500, message = "서버 에러")
})
@RequestMapping(value="/is-running", method={RequestMethod.GET})
public ResponseEntity<AIRunningVo> isRunning() throws Exception {
AIRunningVo res = new AIRunningVo();
res.setState(AiStateManager.getInstance().getState());
return new ResponseEntity<AIRunningVo>(res, HttpStatus.OK);
}
4. vo 내에 parameter 설명도 작성 가능함
@Data
public class AmiDeviceAddVo {
@ApiModelProperty(value = "계량기번호", dataType = "string", required = true)
String amiId;
@ApiModelProperty(value = "검인일자")
String bglnum;
@ApiModelProperty(value = "고객센터")
String ccenter;
...
}
5. 기본 주소는 '/swagger-ui/index.html' 이지만 아래와 같이 redirect 등으로 변경하면 사용하기나 전달하기 좋음.
@Controller
@RequestMapping("/api/usage")
class SwaggerRedirector {
@GetMapping
public String api() { return "redirect:/swagger-ui/index.html"; }
}
'Development > Spring Boot' 카테고리의 다른 글
스프링부트 3.0.0 프로젝트 생성시 에러 해결법 (인텔리제이) (6) | 2022.12.15 |
---|---|
스프링부트 MyBatis에서 파라미터 여러개 넘기기 (parameterType) (0) | 2022.02.18 |
스프링부트 Swagger UI 2.9.2 -> 3.0.0 마이그레이션 방법 (Spring Boot Swagger UI) (0) | 2021.12.27 |
스프링부트 Spring Security 기본 세팅 (스프링 시큐리티) (20) | 2021.10.30 |
스프링부트 Swagger UI 적용 방법 - 스프링부트 2.2 미만 (Spring Boot Swagger UI) (0) | 2021.09.27 |
댓글