build.gradle 파일
/*swagger*/ implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' implementation 'org.hibernate:hibernate-validator:8.0.0.Final'
hibernate-validator를 추가하지 않으면 에러가 발생한다.
→ Unable to create a Configuration, because no Jakarta Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath.
yml 파일
springdoc: packages-to-scan: com.example.gg default-consumes-media-type: application/json;charset=UTF-8 default-produces-media-type: application/json;charset=UTF-8 swagger-ui: path: /api-docs # Swagger UI 경로 tags-sorter: alpha # alpha: 알파벳 순 태그 정렬, method: HTTP Method 순 정렬 operations-sorter: method # alpha: 알파벳 순 태그 정렬, method: HTTP Method 순 정렬 api-docs: path: /api-docs show-actuator: true
SecurityConfig
.authorizeRequests() .requestMatchers("/register", "/login", "/refresh", "/v3/api-docs/**", "/swagger-ui/**", "/swagger-resources/**").permitAll() .requestMatchers("/admin/**").hasRole("ADMIN") .requestMatchers("/user/**").hasRole("USER") .anyRequest().denyAll()
swagger와 관련된 url을 permitAll 해준다.
SwaggerConfig
import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SwaggerConfig { @Bean public OpenAPI openAPI(){ Info info = new Info() .title("Lolonoa 프로젝트") .version("v0.0.1") .description("목표: 3달 안에 Lolonoa 프로젝트 완성시키기 2023.07.24~"); return new OpenAPI() .components(new Components()) .info(info); } }
편리한 사용을 위한 수정
@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI openAPI1(){
Info info = new Info()
.title("Lolonoa 프로젝트")
.version("v3")
.description("목표: 3달 안에 Lolonoa 프로젝트 완성시키기 2023.07.24~");
return new OpenAPI()
.components(new Components())
.info(info);
}
@Bean
public GroupedOpenApi group1(){
return GroupedOpenApi.builder()
.group("유저")
.pathsToMatch("/user/**")
.build();
}
}
GroupedOpenApi를 사용해 경로마다 그룹화해준다.
@Operation(summary = "로그인", description = "로그인 메서드입니다.")
// @ApiResponses(value = {
// @ApiResponse(responseCode = "200", description = "로그인 성공", content = @Content(schema = @Schema(implementation = Member.class))),
// @ApiResponse(responseCode = "401", description = "Bad Request", content = @Content(schema = @Schema(implementation = Error.class))),
//
// })
@PostMapping(value = "/login")
public ResponseEntity<SignResponse> login(@RequestBody LoginRequest request) throws Exception {
return new ResponseEntity<>(memberService.login(request), HttpStatus.OK);
}
@Operation 애노테이션을 붙여 swagger에서 보기 편하게 변경했다. 개발을하다 추가적으로 필요하다면 @ApiResponses로 세부사항을 기재하면 된다.
'개발' 카테고리의 다른 글
사이트 디자인 + DB설계(수정 필요) (0) | 2023.08.04 |
---|---|
[CI/CD] S3 + CodeDeploy (0) | 2023.08.01 |
[Riot Developer] 라이엇 API (0) | 2023.07.27 |
[SpringBoot] JWT구현하기 (0) | 2023.07.25 |
[SpringBoot] Redis 설치 및 사용 (0) | 2023.07.25 |