작성
·
318
·
수정됨
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
현재 프론트와 백앤드로 나눠서 프로젝트를 진행중입니다. swagger를 강의를 참고하여 적용중인데, 다음과 같이 문서화가 되지 않고있습니다.
@Configuration
@EnableSwagger2
@EnableAsync
@EnableWebMvc
public class SwaggerConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select() // ApiSelectorBuilder 생성
.apis(RequestHandlerSelectors.basePackage("com.example.petree.domain")) // API 패키지 경로 todo 패키지 경로 수정
.paths(PathSelectors.ant("domain/**/controller/**")) // path 조건에 따라서 API 문서화 todo API 경로 수정
.build()
.apiInfo(apiInfo()) // API 문서에 대한 정보 추가
.useDefaultResponseMessages(false) // swagger에서 제공하는 기본 응답 코드 설명 제거
.securityContexts(Arrays.asList(securityContext()))
.securitySchemes(Arrays.asList(apiKey()))
;
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("API 문서")
.description("API에 대해서 설명해주는 문서입니다.")
.version("1.0")
.build();
}
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.build();
}
private List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Arrays.asList(new SecurityReference("Authorization", authorizationScopes));
}
private ApiKey apiKey() {
return new ApiKey("Authorization", "Authorization", "header");
}
}
위는 저희 프로젝트의 패키지경로입니다. 무엇이 문제인가요..?
혹시 몰라 SecurityConfig도 올려보겠습니다..
답변 1
0
안녕하세요. 현재 올려주신 코드만으로는 원인 파악이 쉽지가 않네요. 강의에서는 아래 버전을 사용중인데
implementation 'io.springfox:springfox-boot-starter:3.0.0'
올려주신 소스코드를 보니 @EnableSwagger2 를 사용중이신걸로 보여서 강의에서 사용하고 있는 스프링부트 버전과 Swagger 코드를 보고 다시 적용해보시는게 좋을꺼 같습니다.
WebMvcConfigurer와 @EnableAsync, @EnableWebMvc 도 따로 WebConfig 클래스에서 설정해주면 좋을꺼 같네요! SwaggerConfig에서는 swagger관련 설정만 넣어두고요.
버전 수정등을 했을 때도 해결이 안될경우 가능하시다면 메일로 github url이나 코드를 보내주시면 추가적으로 확인해보도록하겠습니다.
@Configuration
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.OAS_30)
.select() // ApiSelectorBuilder 생성
.apis(RequestHandlerSelectors.basePackage("com.app.api")) // API 패키지 경로 todo 패키지 경로 수정
.paths(PathSelectors.ant("/api/**")) // path 조건에 따라서 API 문서화 todo API 경로 수정
.build()
.apiInfo(apiInfo()) // API 문서에 대한 정보 추가
.useDefaultResponseMessages(false) // swagger에서 제공하는 기본 응답 코드 설명 제거
.securityContexts(Arrays.asList(securityContext()))
.securitySchemes(Arrays.asList(apiKey()))
.ignoredParameterTypes(MemberInfo.class)
;
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("API 문서")
.description("API에 대해서 설명해주는 문서입니다.")
.version("1.0")
.build();
}
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.build();
}
private List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Arrays.asList(new SecurityReference("Authorization", authorizationScopes));
}
private ApiKey apiKey() {
return new ApiKey("Authorization", "Authorization", "header");
}
}
메일로 코드를 보내고싶은데 메일주소 알려주실 수 있을까요??