Project/TroubleShooting
Swagger 기능 추가
w.llama
2024. 10. 9. 12:29
인턴 과제로 Spring 프로젝트를 진행중에있는데 이 프로젝트에 swagger 를 적용하는 과제가 있다 이를 적용하기위해
Swagger 의존성 추가
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'
SwaggerConfig 추가
@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI customOpenAPI() {
SecurityScheme securityScheme = new SecurityScheme()
.type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT")
.in(SecurityScheme.In.HEADER).name("Authorization");
SecurityRequirement securityRequirement = new SecurityRequirement().addList("bearerAuth");
return new OpenAPI()
.components(new Components().addSecuritySchemes("bearerAuth", securityScheme))
.security(Arrays.asList(securityRequirement))
.info(getInfo());
}
private Info getInfo(){
return new Info()
.title("Ottoon API")
.version("1.0")
.description("Ottoon API");
}
}
SecurityConfig에 swagger 요청 허용 추가
httpSecurity.authorizeHttpRequests(authorizeRequest ->
authorizeRequest
.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
.requestMatchers("/api/signup").permitAll()
.requestMatchers("/api/login").permitAll()
.requestMatchers(HttpMethod.GET).permitAll()
.requestMatchers("/swagger-ui/**", "/v3/api-docs/**", "/api-docs/**", "/swagger-resources/**", "/webjars/**", "/swagger-ui.html").permitAll() // Swagger 관련 모든 경로 허용
.anyRequest().authenticated() // 나머지 요청은 인증 필요
);
Swagger에서 확인할 api에 swagger에서 명시될 이름 및 설명을 적어준다(@tag어노테이션, @Operation 어노테이션)
@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
@Tag(name ="User", description = "UserController APIs") //swagger tag
public class UserController {
private final UserService userService;
@PostMapping("/signup")
@Operation(summary = "User SignUp", description = "회원가입 기능입니다.") //swagger tag
public ResponseEntity<SignUpResponseDto> signup(@Valid @RequestBody SignUpRequestDto requestDto) {
SignUpResponseDto responseDto = userService.signUp(requestDto);
return ResponseEntity.ok().body(responseDto);
}
// 로그인
@PostMapping("/login")
@Operation(summary = "User Login", description = "로그인 기능입니다.")
public ResponseEntity<LoginResponseDto> login(@Valid @RequestBody LoginRequestDto requestDto) {
LoginResponseDto responseDto = userService.login(requestDto);
return ResponseEntity.ok().body(responseDto);
}
}
이렇게 적용을 전부 하게되면
http://localhost:8080/swagger-ui/index.html 에서
이와 같이 확인을 할수있다.