2014-05-20 11 views
6

Podążam za artykułem pod numerem http://raibledesigns.com/rd/entry/documenting_your_spring_api_with.Nie można uzyskać interfejsu użytkownika Swagger z butem sprężynowym

Wszystko działa poprawnie, ale nie można zintegrować interfejsu użytkownika Swagger.

http://localhost:8080/docs/index.html 

wyniki/przekierowanie błędu.

+0

Dostałeś tę pracę? Nie śledzę tego posta na blogu, ponieważ wiele się zmieniło, ale nie działam też. Zobacz https://github.com/martypitt/swagger-springmvc, aby uzyskać zaktualizowane instrukcje. –

+0

Mam wszystko, co działa poprawnie z SpringBoot (choć zajęło to sporo czasu!) Gdzie jesteś, a ja postaram się pomóc –

+0

Mam to działa ale nie pamiętam głównej przyczyny. –

Odpowiedz

2

Wiem, że to stare pytanie, ale może to pomoże komuś z podobnym problemem w przyszłości.

Podążyłem za podobnym tutorialem do tego, o którym wspomniałeś i sprawiłem, że działa bez problemu. W zeszłym tygodniu umieściłem swój dokument o tym, jak skonfigurować Swagger z interfejsem użytkownika w projekcie Spring boot. Może ci to pomoże, ponieważ jest krótszy i bardziej aktualny.

Dodaj zależnościami Maven

Kij ci w pom.xml:

<dependency> 
<groupId>com.mangofactory</groupId> 
<artifactId>swagger-springmvc</artifactId> 
<version>1.0.2</version> 
<type>jar</type> 
</dependency> 

Dodaj Swagger UI

Pobierz Swagger UI z github. Skopiuj folder dist do katalogu webapp i zmień nazwę na dist na swagger (lub dowolną dowolną nazwę).

Otwórz plik index.htmlwewnątrz skopiowanym katalogu i zmienić adres URL w pierwszej funkcji javascript więc wskazuje na /api-docs endpoint:

var url = window.location.search.match(/url=([^&]+)/); 
    if (url && url.length > 1) { 
    url = decodeURIComponent(url[1]); 
    } else { 
    url = "/project-name/api-docs"; 
} 

Konfiguracja Swagger

Tworzenie SwaggerConfig.java klasa i skonfiguruj tam swagger:

@Configuration 
@EnableSwagger 
@EnableAutoConfiguration 
public class SwaggerConfig { 
    private SpringSwaggerConfig springSwaggerConfig; 
    @Autowired 
    public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) { 
    this.springSwaggerConfig = springSwaggerConfig; 
    } 
    @Bean 
    public SwaggerSpringMvcPlugin customImplementation() { 
    return new SwaggerSpringMvcPlugin(this.springSwaggerConfig) 
    // Root level documentation 
    .apiInfo(new ApiInfo("Swagger-demo JSON API", "This service provides a JSON representation the service API", null, null, null, null)) 
    .useDefaultResponseMessages(false) 
    // Map the specific URL patterns into Swagger 
    .includePatterns("/greeting.*"); 
    } 
} 

Twój swagger powinien teraz działać. Spróbuj uzyskać dostęp do /project-name/swagger/index.html.

1

Odpowiadam na to z konfiguracją swagger2 wewnątrz aplikacji wiosennej opartej na gradle. Poniżej przedstawiono konfigurację wymaganą dla Swagger2.

Dodaj Gradle Configuartion

Dodaj Gradle Zależności wewnątrz pliku build.gradle

dependencies { 
    compile("io.springfox:springfox-swagger2:2.0.2") 
    compile("io.springfox:springfox-swagger-ui:2.0.2") 
    } 

Swagger2 Confugration Class

@Configuration 
@EnableSwagger2 
public class SwaggerConfig { 
    @Bean 
    public Docket userApi() { 
    return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()) 
     .paths(PathSelectors.any()).build().pathMapping("/") 
     .directModelSubstitute(LocalDate.class, String.class) 
     .genericModelSubstitutes(ResponseEntity.class) 
     .alternateTypeRules(newRule(
      typeResolver.resolve(DeferredResult.class, 
       typeResolver.resolve(ResponseEntity.class, WildcardType.class)), 
      typeResolver.resolve(WildcardType.class))) 
     .useDefaultResponseMessages(false) 
     .globalResponseMessage(RequestMethod.GET, 
      newArrayList(new ResponseMessageBuilder().code(500).message("500 message") 
       .responseModel(new ModelRef("Error")).build())) 
     .securitySchemes(newArrayList(apiKey())).securityContexts(newArrayList(securityContext())) 
     .apiInfo(apiInfo()); 
    } 

    @Autowired 
    private TypeResolver typeResolver; 

    private ApiKey apiKey() { 
    return new ApiKey("mykey", "api_key", "header"); 
    } 

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

    List<SecurityReference> defaultAuth() { 
    AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); 
    AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; 
    authorizationScopes[0] = authorizationScope; 
    return newArrayList(new SecurityReference("mykey", authorizationScopes)); 
    } 

    @Bean 
    SecurityConfiguration security() { 
    return new SecurityConfiguration("123456", "test-app-realm", "clientapp", "apiKey"); 
    } 

    @Bean 
    UiConfiguration uiConfig() { 
    return new UiConfiguration("validatorUrl"); 
    } 

    private ApiInfo apiInfo() { 
    ApiInfo apiInfo = new ApiInfo("DSM API", "API for DSM", "1.0.0", "termsOfServiceUrl", 
     "[email protected]", null, null); 
    return apiInfo; 
    } 

} 

Dodaj Swagger UI

Pobierz Swagger UI z github.Skopiuj folder dist do swoich src/main/resources/static katalogu i zmień dist do Swagger

HomeController.class

@Api(basePath = "/", value = "/", description = "Home Controller") 
@Controller 
public class HomeController { 

    @RequestMapping("/") 
    public String home() { 
    return "redirect:swagger-ui.html"; 
    } 

} 

MyApplication.class

@SpringBootApplication 
@ComponentScan(basePackageClasses = SwaggerConfig.class) 
public class MyApplication { 

    public static void main(String[] args) { 
    SpringApplication.run(MyApplication.class, args); 
    } 


} 

Skonfiguruj aplikację rozruchu wiosennego za pomocą zależności i uruchom, aby zobaczyć t on API.

Url będzie http://localhost:8080/v2/swagger-ui.html możesz również dostosować to jak wyżej.

0

Ja też mam ten sam problem. Udało mi się zobaczyć jsona, ale nie uśmieszać interfejsu użytkownika po dodaniu folderu docelowego. W initialize klasy, która rozciąga SpringBootServletInitializer dodałem poniżej metody to działa idealnie

@Override 
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
    return application.sources(SampleWebStaticApplication.class); 
} 

zapoznaj link

Powiązane problemy