2016-08-30 6 views
3

내 Swagger UI를 내 프로젝트에서 사용할 수 없습니다. Swagger UI는 정상적으로 작동하지만 내 REST 컨트롤러를 나열하지 않습니다.v2/api-docs 끝점에서 json을 볼 수 있지만 Swagger UI에 컨트롤러/종점이 전혀 표시되지 않습니다.

스프링 4.2.6.RELEASE 및 Swagger 2.5.0을 사용하고 있습니다. 내 휴식 서비스는 Tomcat 7.0.54에 배포됩니다.

Tomcat 7.0.54가 나타나면 스와거 엔드 포인트를 가져올 수 있습니다. json 메시지를 가져 오는 v2/api-docs 엔드 포인트를 사용할 수 있습니다. 나는 또한 swagger-ui를 칠 수는 있지만 컨트롤러 목록은 보이지 않는다. 드롭 다운은

enter image description here

아래로, 비어 ** 나는 현재 직면하고 문제는

  1. 내가, 때/자신감 - 자원/구성/UI를 가져올 수없는 생각이다 나는 UI를 시작한다. UI가 fetch/swagger-resources/configuration/ui를 시도하는 동안 404 (찾을 수 없음) errror를 얻는다. swagger-resources에 대한 리소스 핸들러를 설정했지만 도움이되지 않습니다. 누락 된 부분을 알려주시겠습니까?
  2. 확장 된 WAR에서 META-INF 아래의 resources 폴더를 볼 수 있습니까? 거기에 어떤 springfox 관련 파일/폴더가 META-INF 안에 있어야합니까? **

대한 자신감 메이븐 의존성
io.springfox springfox-swagger2 2.5.0
io.springfox springfox-자신감-UI 2.5.0

아래 내 SwaggerCongifurat입니다. 이온 아래

@EnableSwagger2 
public class SwaggerConfiguration { 

@Bean 
public Docket api() { 
    List<SecurityContext> security = new ArrayList<SecurityContext>(); 
    security.add(securityContext()); 
    return new Docket(DocumentationType.SWAGGER_2) 
      .select() 
      .apis(RequestHandlerSelectors.any()) 
      .paths(PathSelectors.any()) 
      .build() 
      .pathMapping("/").securityContexts(security); 
} 

private SecurityContext securityContext() { 
    return SecurityContext.builder() 
      .forPaths(PathSelectors.regex("/")) 
      .build(); 
} 
} 

내 WebConfig.xml

다음
@EnableWebMvc 
@Configuration 
@Import(SwaggerConfiguration.class) 
@ComponentScan("com.bank.direct.services") 

public class WebConfig extends WebMvcConfigurerAdapter { 


@Override 
public void configureMessageConverters(List<HttpMessageConverter<?>> pConverters) { 
    pConverters.add(RestUtils.getJSONMessageConverter()); 
} 


@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/"); 
} 

} 

아래로

@EnableWebSecurity 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
@Configuration 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 


@Autowired 
private AuthenticationService _authenticationService; 


@Autowired 
public void globalUserDetails(AuthenticationManagerBuilder pAuth) throws Exception { 

    pAuth.userDetailsService(_authenticationService); 
} 


@Override 
protected void configure(HttpSecurity pHttp) throws Exception { 

    // Enable HTTP caching 
    pHttp.headers().cacheControl().disable(); 

    // Configure security 
    pHttp.httpBasic() 

    // -- Allow only authenticated request 
    .and() 
    .authorizeRequests() 
    .anyRequest().authenticated() 

    // -- Logout configuration 
    .and() 
    .logout() 
    .logoutUrl("/rest/users/logout/") 
    .deleteCookies("XSRF-TOKEN") 
    .logoutSuccessUrl("/static/index.html") 
    .invalidateHttpSession(true) 

    // -- CSRF configuration 
    .and() 
    .csrf().csrfTokenRepository(csrfTokenRepository()) 
    .and() 
    .addFilterAfter(csrfHeaderFilter(), SessionManagementFilter.class); 

} 


private Filter csrfHeaderFilter() { 

    return new OncePerRequestFilter() { 

     @Override 
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { 

      CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class.getName()); 
      if (csrf != null) { 
       Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN"); 
       String token = csrf.getToken(); 
       if (cookie == null || token != null && !token.equals(cookie.getValue())) { 
        cookie = new Cookie("XSRF-TOKEN", token); 
        cookie.setPath("/"); 
        response.addCookie(cookie); 
       } 
      } 
      filterChain.doFilter(request, response); 
     } 
    }; 
} 


private CsrfTokenRepository csrfTokenRepository() { 
    HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository(); 
    repository.setHeaderName("X-XSRF-TOKEN"); 
    return repository; 
} 

나머지 컨트롤러 클래스 SecurityCongif.xml입니다

@RestController 
@RequestMapping(value = "/vehicles", produces =  MediaType.APPLICATION_JSON_UTF8_VALUE) 
public class VehicleResource extends Resource { 

@Autowired 
private IVehicleService _vehicleService; 

@RequestMapping(value = "/brands", method = RequestMethod.GET) 
public APIResponseEntity getBrands(WebRequest pWebRequest) { 

    IUser user = getUser(pWebRequest); 
    BrandCriteria criteria = new BrandCriteria(); 
    criteria.setLanguageCode(user.getLanguageCode()); 

    List<Brand> res = _vehicleService.getBrands(user, criteria); 

    return newResponseOK(res); 
} 

@RequestMapping(value = "/brands/{brand_code}", method = RequestMethod.GET) 
public APIResponseEntity getBrand(WebRequest pWebRequest, @PathVariable("brand_code") String pBrandCode) { 

    IUser user = getUser(pWebRequest); 
    BrandCriteria criteria = new BrandCriteria(); 
    criteria.setLanguageCode(user.getLanguageCode()); 
    criteria.setBrandCode(pBrandCode); 
    List<Brand> res = _vehicleService.getBrands(user, criteria); 
    return newResponseOK(res); 
} 
} 

답변

0

Swagger UI에서 생성 된 Swagger Definition을 가리켜 야합니다. http://example.com/api 대신 즉이 http://localhost:8080/RestResource/api/swagger.json

This article might help you more

처럼 자신감 정의 경로 뭔가 보답