build.gradle 적용
- gradle dependency 참고 사이트(https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui)에서 코드 복사해서 붙여 넣기
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/
참고 사이트
트러블 슈팅
- http://localhost:8080/swagger-ui.html의 Whitelabel Error Page
- org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException
'기타 기술' 카테고리의 다른 글
spring 백그라운드 실행 시 로그 남기기 (0) | 2023.06.07 |
---|---|
.gitignore 폴더에서 특정 파일만 추가하기 (0) | 2023.06.07 |
AWS 백그라운 서버 동작 (0) | 2023.06.07 |
OpenAPI를 SpringBoot에 적용하기 (0) | 2023.03.30 |
연관관계에 있는 객체 생성에 관한 고찰 (0) | 2023.02.10 |