기타 기술

Swagger 사용하기

곰돌이볼 2023. 4. 14. 19:27

build.gradle 적용


dependencies {
   //swagger
	implementation 'io.springfox:springfox-boot-starter:3.0.0'
}

 

 

SwaggerConfig.java


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.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Diary Side-Project API")
                .version("1.0.0")
                .description("다이어리 Swagger API 입니다.")
                .build();
    }
}

 

코드 적용


  • controller 클래스
@RestController
@RequestMapping("api/members")
@Validated
@RequiredArgsConstructor
@ApiOperation(value = "회원 정보 API", tags = {"Member-Controller"}) // Swagger 추가 (1)
public class MemberController {
    private final MemberService memberService;
    private final MemberMapper mapper;

    //회원가입
    @PostMapping
    @ApiOperation(value = "회원가입", notes = "새로운 회원을 등록합니다.") // Swagger 추가 (2)
    @ApiResponses(value = { // Swagger 추가 (3)
            @ApiResponse(code = 200, message = "회원가입 완료")
    })
    public ResponseEntity postMember(@Valid @RequestBody MemberDto.Post requestBody) {
        Member member = memberService.createMember(mapper.memberPostToMember(requestBody));

        return ResponseEntity.ok(mapper.memberToMemberResponse(member));
    }

...

    //닉네임으로 회원 검색
    @GetMapping("/search")
    @ApiOperation(value = "이름으로 멤버 검색", notes = "nickname을 통해서 멤버를 검색합니다.") // Swagger 추가 (4)
    public ResponseEntity search(
            @ApiParam(name = "nickname", value = "이름", required = true, example = "홍길동") // Swagger 추가 (5)
            @RequestParam(value = "nickname") String nickname) {
        return ResponseEntity.ok(mapper.memberToMemberResponse(memberService.findByNiceName(nickname)));
    }



}
  • dto 클래스
@Getter
@NoArgsConstructor
@ApiModel("Member Post") // Swagger 추가 (1)
public static class Post{
    @Email
    @NotBlank(message = "이메일을 입력해주세요")
    @ApiModelProperty(notes = "이메일", required = true, example = "test@gmail.com") // Swagger 추가 (2)
    private String email;

    @NotBlank(message = "패스워드를 입력해주세요.")
    @Pattern(regexp = "(?=.*[0-9])(?=.*[a-z])(?=.*\\W)(?=\\S+$).{8,}", message = "비밀번호는 8자 이상, 영문 소문자, 숫자, 특수문자를 적어도 1개 포함시켜주세요")
    @ApiModelProperty(notes = "비밀번호", required = true, example = "qwer1234!!") // Swagger 추가 (3)
    private String pw;
}

 

  • 사용 메서드 - Controller 클래스
    • @ApiOperation(value = "회원 정보 API", tags = {"Member-Controller"})
    • @ApiOperation(value = "회원가입", notes = "새로운 회원을 등록합니다.")
      @ApiResponses(value = {
                  @ApiResponse(code = 200, message = "회원가입 완료"),
                 @ApiResponse(code = 404, message = "Member Not Found")
      })
    • @ApiParam(name = "nickname", value = "이름", required = true, example = "홍길동")
  • 사용 메서드 - dto 클래스
    • @ApiModel("Member Post")
    • @ApiModelProperty(notes = "비밀번호", required = true, example = "qwer1234!!")

 

코드 실행


  • http://localhost:8080/swagger-ui/index.html 또는 http://localhost:8080/swagger-ui/

 

참고 사이트


 

트러블 슈팅