API를 개발할때 프론트와 원활한 소통을 위해서는 API 명세서가 필수이다. 명세서를 작성하는 여러가지 방법이 있는데 그 중 API 문서화를 자동으로 해주는 Swagger를 사용해보도록 하자.
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
메이븐에 dependency를 추가한다.
javaconfig 를 설정한다.
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket swaggerApi(){
return new Docket(DocumentationType.SWAGGER_2).apiInfo(swaggerInfo()).select()
.apis(RequestHandlerSelectors.basePackage("kr.or.dining_together.member.controller"))
.paths(PathSelectors.ant("/auth/**"))
.build()
.useDefaultResponseMessages(false); // 기본으로 세팅되는 200,401,403,404 메시지를 표시 하지 않음
}
private ApiInfo swaggerInfo() {
return new ApiInfoBuilder().title("Member API Documentation")
.description("회원 API 문서")
.version("1").build();
}
}
https://springfox.github.io/springfox/docs/current/#springfox-spring-mvc-and-spring-boot
공식문서
Springfox swagger 2 사용
Springfox 프레임 워크의 기본 인터페이스가 될 빌더로 구성을 위한 여러 가지 기본값과 편리한 방법을 제공하고 있다. 이후 select()로 ApiSelectorBuilder를 반환받아 사용할 수 있도록 해준다.
어떤 위치에서 api를 가져올것인가를 정의해준다.
(RequestHandlerSelectors.basePackage("kr.or.dining_together.member.controller"))
해당 패키지 하위에 있는 Controller를 기준으로 문서를 만들어 준다.
특정 path만 필터링해서 문서를 만들어 준다.
기본으로 세팅되는 200,401,403,404 메시지
필자같은 경우 따로 오류를 관리하기 위해서 표시하지 않았다
@Api(tags={"1. Sign"})
@RequiredArgsConstructor
@RestController
@RequestMapping(value="/auth")
public class SignController {
/*
로그인 회원가입 로직
*/
private final UserRepository userRepository;
private final JwtTokenProvider jwtTokenProvider;
private final ResponseService responseService;
private final PasswordEncoder passwordEncoder;
private final UserService userService;
@ApiOperation(value="로그인", notes = "이메일을 통해 로그인한다.")
@PostMapping(value="/login")
public SingleResult<String> login(@RequestBody @ApiParam(value="이메일 비밀번호",required = true) RequestLogin requestLogin){
UserDto userDto = userService.login(requestLogin);
return responseService.getSingleResult(jwtTokenProvider.createToken(String.valueOf(userDto.getEmail()), userDto.getRoles()));
}
}
최상단 타이틀값 세팅
각 resource의; 제목과 설명
파라미터의 대한 설명
보통 이런 설정파일은 이해하기 힘들기 때문에 공식문서나 블로그를 찾아서 하나하나씩 뜯어보는게 이해하기 좋은것같다....힘들긴 하지만..
https://taetaetae.github.io/posts/openapi-and-swagger-ui-in-spring-boot/
https://springfox.github.io/springfox/docs/current/#springfox-spring-mvc-and-spring-boot