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