1. Swagger란?
서버로 요청되는 URL 리스트를 HTML화면으로 문서화 및 테스트 할 수 있는 라이브러리입니다.
테스트는 Spring Boot 2.2.2 RELEASE에서 진행 되었습니다.
2. pom.xml
...
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
...
3. SwaggerConfig.java
import java.util.HashSet;
import java.util.Set;
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;
/**
*
* @author MW
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.consumes(getConsumeContentTypes())
.produces(getProduceContentTypes())
.apiInfo(getApiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.bamdule.controller"))
.paths(PathSelectors.ant("/member/**"))
.build();
}
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;
}
private ApiInfo getApiInfo() {
return new ApiInfoBuilder()
.title("API")
.description("[Bamdule] API")
.contact(new Contact("Bamdule Swagger", "https://bamdule.tistory.com/", "Bamdule5@gmail.com"))
.version("1.0")
.build();
}
}
- Swagger 설정을 정의한 코드입니다.
- .consume()과 .produces()는 각각 Request Content-Type, Response Content-Type에 대한 설정입니다.(선택)
- .apiInfo()는 Swagger API 문서에 대한 설명을 표기하는 메소드입니다. (선택)
- .apis()는 Swagger API 문서로 만들기 원하는 basePackage 경로입니다. (필수)
- .path()는 URL 경로를 지정하여 해당 URL에 해당하는 요청만 Swagger API 문서로 만듭니다.(필수)
4. Member.java
import io.swagger.annotations.ApiParam;
public class Member {
@ApiParam(value = "member ID", required = true)
private String id;
@ApiParam(value = "member age", required = true)
private int age;
@ApiParam(value = "member email", required = true)
private String email;
//setter,getter 생략..
}
- @ApiParam 어노테이션은 멤버 변수에 대한 설명 및 다양한 설정을 지원합니다.
- value : 저장되야 할 값에 대한 설명을 명시합니다.
- required : 필수 여부를 지정합니다.
5. MemberController.java
import com.example.bamdule.TO.Member;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(value = "/member")
public class MemberController {
@ApiOperation(value = "Member Save", notes = "사용자 저장")
@GetMapping(value = "/save")
@ResponseBody
public ResponseEntity saveMember(Member member) {
/*
member Save ...
*/
return ResponseEntity.ok(member);
}
}
- @ApiOperation : 메소드 설정 및 설명문을 기입합니다.
- value : 메소드 설명
- notes : 메소드 설명 2
- SwaggerConfig.java 에서 해당 Controller를 Swagger API 문서로 지정합니다.
- 브라우저를 통해 domain/contextPath/swagger-ui.html 로 이동하면 Swagger API 문서 페이지를 볼 수 있습니다.
6. Swagger API 문서 화면
- member-controller를 클릭합니다.
- 화면에는 보이지 않지만 Try it out을 누른 후 Prameter를 입력해줍니다.
- 입력이 완료되었다면, Execute 버튼을 눌러주세요.
- API 테스트에 대한 Code와 Detail한 응답 결과가 화면에 표시됩니다.
'IT > Spring' 카테고리의 다른 글
[Spring Boot] Hibernate Open Session In View (0) | 2020.02.02 |
---|---|
[Spring Boot] Hibernate 연동 방법 (0) | 2020.01.23 |
[Spring Boot] @Valid 어노테이션으로 Parameter 검증하기 (0) | 2020.01.10 |
[Spring Boot] thymeleaf template layout 사용하기 (5) | 2020.01.08 |
[Spring Boot] SpringBootServletInitalizer를 상속하는 이유 (0) | 2020.01.07 |