com.sight_spot_trip.SwaggerConfig.java Source code

Java tutorial

Introduction

Here is the source code for com.sight_spot_trip.SwaggerConfig.java

Source

package com.sight_spot_trip;

import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.google.common.base.Predicate;
import com.google.common.base.Predicates;

import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ApiKey;
import springfox.documentation.service.AuthorizationScope;
import springfox.documentation.service.Contact;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.service.SecurityScheme;
import springfox.documentation.service.Tag;
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;

@Configuration
@EnableSwagger2
//see https://github.com/springfox/springfox/blob/master/docs/asciidoc/getting_started.adoc#springfox-spring-data-rest
//@Import({springfox.documentation.spring.data.rest.configuration.SpringDataRestConfiguration.class})
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2).useDefaultResponseMessages(false).select()
                //            .apis(Predicates.and(
                //                  Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot")), 
                //                  withClassAnnotations(RepositoryRestResource.class, RepositoryRestController.class)))
                .apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot")))
                .paths(Predicates.not(PathSelectors.regex("/error.*"))).build()
                .tags(new Tag("untagged", "This is untagged"), tags()).apiInfo(apiInfo()).protocols(protocols())
                .securitySchemes(securitySchemes()).securityContexts(securityContexts());
    }

    // Had to create this because needed an `or` on the annotations
    @SafeVarargs
    private final Predicate<RequestHandler> withClassAnnotations(final Class<? extends Annotation>... annotation) {
        return input -> Arrays.stream(annotation)
                .anyMatch(aClass -> input.declaringClass().isAnnotationPresent(aClass));
    }

    private Tag[] tags() {
        List<Tag> tags = new ArrayList<>();
        tags.add(new Tag("sightspot", "Sight Spot Trip operation"));
        return tags.toArray(new Tag[tags.size()]);
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("sightspot-API Swagger Documentation")
                .description("sightspot-API Swagger Documentation").termsOfServiceUrl("http://liudonghua.com")
                .contact(new Contact("liudonghua", "liudonghua.com", "liudonghua123@gmail.com"))
                .license("Apache License Version 2.0").licenseUrl("https://www.apache.org/licenses/LICENSE-2.0")
                .version("2.0").build();
    }

    private Set<String> protocols() {
        Set<String> protocols = new HashSet<>();
        protocols.add("http");
        return protocols;
    }

    private List<? extends SecurityScheme> securitySchemes() {
        List<SecurityScheme> authorizationTypes = Arrays.asList(new ApiKey("token", "token", "query"));
        return authorizationTypes;
    }

    private List<SecurityContext> securityContexts() {
        List<SecurityContext> securityContexts = Arrays.asList(SecurityContext.builder()
                .forPaths(Predicates.not(PathSelectors.regex("^(/error.*|/api/auth/login)$")))
                .securityReferences(securityReferences()).build());
        return securityContexts;
    }

    private List<SecurityReference> securityReferences() {
        List<SecurityReference> securityReferences = Arrays
                .asList(SecurityReference.builder().reference("token").scopes(new AuthorizationScope[0]).build());
        return securityReferences;
    }

}