springfox/swagger2 integration with springboot application

2.2k views Asked by At

I am new to springfox as well as swagger2. I have been trying to integrate springfox/swagger2 with my spring boot micro services to generate API documentation.

I followed the steps which is given in 'http://springfox.github.io/springfox/docs/snapshot/' site. But i am unsuccess to bring the api documentation page.

Whenever i am trying to hit the URL "http://localhost:8081/swagger-ui.html" i am seeing a generic error page in the browser "Whitelabel Error Page".

I am not sure what mistake i am doing while configuring the springfox in my application.

package com.diginsite.microservices;

import static com.google.common.base.Predicates.or;
import static com.google.common.collect.Lists.newArrayList;
import static springfox.documentation.builders.PathSelectors.regex;
import static springfox.documentation.schema.AlternateTypeRules.newRule;

import java.util.List;

import org.joda.time.LocalDate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.context.request.async.DeferredResult;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.builders.ResponseMessageBuilder;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.schema.WildcardType;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import com.fasterxml.classmate.TypeResolver;
import com.google.common.base.Predicate;

//@SpringBootApplication
@EnableSwagger2
@Configuration
//@EnableWebMvc
@ComponentScan("com.diginsite.microservices.web")
public class Swagger2SpringBoot {
 static final String detailDescription = "The `Business Banking Microservice` is a RESTful API that provides PD teams with out of the box functionality for Digital Insight's `Business Banking` suite of products. \n \n"
   +"Below is a list of available REST API calls for business banking resources.";
 @Autowired
 private TypeResolver typeResolver;
 
// public static void main(String[] args) {
//        ApplicationContext ctx = SpringApplication.run(Swagger2SpringBoot.class, args);
//    }

 @Bean
 public Docket swaggerSpringMvcPlugin() {
  return new Docket(DocumentationType.SWAGGER_2)
    .groupName("v1-bbs")
    .apiInfo(apiInfo())
    .select()
    .apis(RequestHandlerSelectors.any())
    .paths(PathSelectors.any())
    .build()
    .pathMapping("/v1")
    .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()));
 }

 private Predicate<String> entitlementsAPIPaths() {
        return or(
                regex("/v1/fis/{fiId}/businessCustomers.*"),
                regex("/v1/fis/{fiId}/companies/{companyId}/entitlements.*")
        );
    }
 
 private ApiKey apiKey() {
  return new ApiKey("mykey", "api_key", "header");
 }
 
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Overview")
                .description(detailDescription)
                .termsOfServiceUrl("http://springfox.io")
                .contact("springfox")
                .license("Apache License Version 2.0")
                .licenseUrl("https://github.com/springfox/springfox/blob/master/LICENSE")
                .version("2.0")
                .build();
    }


 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));
 }
}

2

There are 2 answers

0
Ronny Shibley On

Make sure you included

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>swagger-ui</artifactId>
    <version>2.1.8-M1</version>
</dependency>
0
JoseA On

Are you including your app's context root?

http://localhost:8081/<your-context-root-here>/swagger-ui.html