SpringBoot+Swagger整合API

SpringBoot+Swagger整合APIjava

Swagger:整合規範的api,有界面的操做,測試spring

 

1.在pom.xml加入swagger依賴數據庫

<!--整合Swagger2配置類-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

 

2.在application.yml開啓swaggerapi

#引入swagger
swagger:
  enable: true

  

3.配置SwaggerConfiguration.java併發

注意:@Value("${swagger2.basePackage:com.spingcloud.serviceconsumer.controller}") 添加掃描的api入口app

@Configuration
@EnableSwagger2
public class SwaggerConfiguration  {

    @Value("${swagger2.basePackage:com.spingcloud.serviceconsumer.controller}")
    private String swagger2BasePackage;
    @Value("${swagger2.title:系統API文檔}")
    private String swagger2Title;
    @Value("${swagger2.api.version:2.0}")
    private String apiVersion;


    @Bean
    public Docket createRestApi() {

        //添加query參數start
        ParameterBuilder tokenPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<Parameter>();
//        tokenPar.name("token").description("令牌").modelRef(new ModelRef("string")).parameterType("query").required(true).build();
        pars.add(tokenPar.build());
        //添加query參數end




        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select().apis(RequestHandlerSelectors.basePackage(swagger2BasePackage))
                .paths(PathSelectors.any())
                .build()
//                .globalOperationParameters(pars)
                //添加驗證
//                .securitySchemes(securitySchemes())
//                .securityContexts(securityContexts())
                //添加驗證
                ;



    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title(swagger2Title)
                .version(apiVersion)
                .build();
    }



    private List<ApiKey> securitySchemes() {
        List<ApiKey> apiKeyList= new ArrayList();
        apiKeyList.add(new ApiKey("token", "令牌", "header"));
        return apiKeyList;
    }

    private List<SecurityContext> securityContexts() {
        List<SecurityContext> securityContexts=new ArrayList<>();
        securityContexts.add(
                SecurityContext.builder()
                        .securityReferences(defaultAuth())
                        .forPaths(PathSelectors.regex("^(?!auth).*$"))
                        .build());
        return securityContexts;
    }

    List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        List<SecurityReference> securityReferences=new ArrayList<>();
        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
        return securityReferences;
    }

}
View Code

 

4.在Controller類上添加:ide

@RestController
//@RequestMapping("/api/v1/order")
@RequestMapping(value = "api")
@Api("OrderFeginController相關的api")
public class OrderFeginController {

    @Autowired
    private ProductOrderFeginService productOrderFeginService;

    //限流:對外提供一個服務接口,容許最大併發數爲10
//    private final Semaphore permit = new Semaphore(4, true);

    //當調用微服務出現異常會降級到saveOrderFail方法中
    @HystrixCommand(fallbackMethod = "saveOrderFail")
    @RequestMapping(value = "/saveorder",method = RequestMethod.GET)
    @ApiOperation(value = "根據id查詢商品信息", notes = "查詢數據庫中某個的商品信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "user_id",paramType = "query", value = "用戶ID", required = true),
            @ApiImplicitParam(name = "product_id",value = "商品ID",required = true,paramType = "query",dataType = "string")
    })
    public Object saveorder(@RequestParam("user_id")int userId, @RequestParam("product_id") int productId) throws InterruptedException {



        return productOrderFeginService.saveorder(userId, productId);


    }


    //注意,方法簽名必定要要和api方法一致
    private Object saveOrderFail(int userId, int productId){

        System.out.println("controller中的降級方法");

        Map<String, Object> msg = new HashMap<>();
        msg.put("code", -1);
        msg.put("msg", "搶購人數太多,您被擠出來了,稍等重試");
        return msg;
    }
}
View Code
相關文章
相關標籤/搜索