Swagger 란?
스웨거는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크이다. - 위키
Swagger 2.x 버전을 적용할 수도 있고 3.x 버전을 적용할 수도 있습니다.
큰 차이는 없기 때문에 최신 버전인 Swagger 3.x 버전을 적용합니다.
Swagger 적용
gradle 추가
implementation 'io.springfox:springfox-boot-starter:3.0.0'
implementation 'io.springfox:springfox-swagger-ui:3.0.0'
SwaggerConfig 생성
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any()) // 현재 RequestMapping으로 할당된 모든 URL 리스트를 추출
.paths(PathSelectors.ant("/api/**")) // 그중 /api/** 인 URL들만 필터링
.build();
}
}
Controller 생성
@RequestMapping("/api/test")
@Api(tags = {"테스트 컨트롤러"}) //컨트롤러명 표시
@RestController
public class UserController {
@ApiOperation("테스트메소드") // 메소드명 표시
@GetMapping
public String test(){
return "tes";
}
}
문서확인
http://localhost:8090/swagger-ui/
간단한 사용법
컨트롤러에 적용법은 위에서 보듯이 하면 되고 요구하는 Request 및 Response 명세서를 정의하는 방법입니다.
Controller
@ApiOperation("DTO테스트") // 메소드명 표시
@GetMapping
public SwaggerDto test(@RequestBody SwaggerDto swaggerDto){
return swaggerDto;
}
DTO
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel("스웨거 DTO")
@Data
public class SwaggerDto {
@ApiModelProperty("이름") //필드의 명을 적을 수 있음
private String name;
@ApiModelProperty(value = "나이", required = true) //required 필수 여부를 표시
private Integer age;
@ApiModelProperty(value = "성별", example = "남 or 여") //example 예시를 표시
private String gender;
@ApiModelProperty(value = "휴대폰번호", hidden = true) // hidden 으로 감출수 있습니다.
private String phone;
}
스웨거 확인
- 밑에보면 Request 와 200 OK 일경우 Response가 잘 표시되는 것을 확인할 수 있다.
error 해결법
버전에러
- 정확하게는 스프링부트 버전 3.x.x은 자바버전을 17을 사용해야하는데 자바 17버전에서는 스웨거가 정상적으로 돌아가지 않는다는 트러블 슈팅이 있었다.
스프링버전을 2.6.x , 자바11 로 낮춰서 해결
SpringBoot 2.6 이상 springfox-swagger3.0 적용 시 에러
spring boot 2.6.0부터 요청 경로를 ControllerHandler에 매칭시키기 위한 전략의 기본값이 ant_path_matcher 전략 -> path_pattern_parser 전략으로 변경되었기 때문이다.
- 에러 메세지
Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang
.NullPointerException: Cannot invoke "org.springframework.web.servlet.mvc.condition
.PatternsRequestCondition.getPatterns()" because "this.condition" is null
- 해결 방안 2가지
application.properties에서 spring.mvc.pathmatch.matching-strategy=ant_path_matcher로 default 값을 변경한다. spring boot의 버전을 2.5.x로 낮춘다.
'몰아 넣기' 카테고리의 다른 글
[Java] 자바 record에 대해서 (0) | 2023.02.25 |
---|---|
[자료구조] 우선순위 큐(priorityQueue) 알아보기 (with 자바) (0) | 2023.02.11 |
[자바] 박싱과 언박싱에 대해서 (0) | 2023.02.05 |
[Spring] @Async를 사용해 비동기 메소드 만들어보기 (0) | 2023.01.08 |
[java/spring] Stream의 안좋은 예시 :1 (0) | 2022.12.24 |