SpringBoot---Swagger文件管理應用
阿新 • • 發佈:2018-12-16
1、新增依賴
<dependencies> <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> </dependencies>
2、建立獨立的Maven子模組
a、Swagger配置類
package com.imooc; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.util.StringUtils; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.ApiSelectorBuilder; import springfox.documentation.spring.web.plugins.Docket; @Configuration //@EnableConfigurationProperties(SwaggerInfo.class) public class SwaggerConfig { @Autowired private SwaggerInfo swaggerInfo; @Bean public Docket controllerApi(){ System.out.println("======swaggerInfo====="+swaggerInfo); Docket docket = new Docket(DocumentationType.SWAGGER_2) .groupName(swaggerInfo.getGroupName()) // 分組名 .apiInfo(apiInfo()); ApiSelectorBuilder builder = docket.select(); if(!StringUtils.isEmpty(swaggerInfo.getBasePackage())){ builder = builder.apis(RequestHandlerSelectors.basePackage(swaggerInfo.getBasePackage())); // 篩選顯示介面 } if(!StringUtils.isEmpty(swaggerInfo.getAntPath())){ builder = builder.paths(PathSelectors.ant(swaggerInfo.getAntPath())); } return builder.build(); } public ApiInfo apiInfo(){ return new ApiInfoBuilder() .title(swaggerInfo.getTitle()) .description(swaggerInfo.getDescription()) .termsOfServiceUrl("http://springfox.io") .contact("imooc") .license(swaggerInfo.getLicense()) .version("2.0") .build(); } }
屬性配置類
package com.imooc; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * Swagger配置資訊 * @author zemel * */ @Component @ConfigurationProperties(prefix="swagger", ignoreUnknownFields = true) public class SwaggerInfo { private String groupName = "controller"; private String basePackage; private String antPath; private String title = "HTTP API"; private String description = "管理端介面"; private String license = "Apache License Version 2.0"; public String getGroupName() { return groupName; } public void setGroupName(String groupName) { this.groupName = groupName; } public String getBasePackage() { return basePackage; } public void setBasePackage(String basePackage) { this.basePackage = basePackage; } public String getAntPath() { return antPath; } public void setAntPath(String antPath) { this.antPath = antPath; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getLicense() { return license; } public void setLicense(String license) { this.license = license; } @Override public String toString() { return "SwaggerInfo [groupName=" + groupName + ", basePackage=" + basePackage + ", antPath=" + antPath + ", title=" + title + ", description=" + description + ", license=" + license + "]"; } }
b、其他工程應用方法有三種
1)一種直接在App.java中使用@Import註解匯入配置類
@SpringBootApplication
//@EnableMySwagger
@Import(SwaggerConfig.class)
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
2)編寫@Enable*的註解,在App.java中啟用
package com.imooc;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Import;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
@Target(value = { java.lang.annotation.ElementType.TYPE })
@Documented
@Import({SwaggerConfig.class})
@EnableSwagger2 // 組合註解
public @interface EnableMySwagger {
}
@SpringBootApplication
@EnableMySwagger
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
3)在resource/META_INF/spring.factories下配置Config類
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.imooc.SwaggerConfig
3、在應用Swagger工程配置檔案(application.properties)
# 配置swagger
swagger.groupName=manager
swagger.basePackage=com.imooc.controller
4、Swagger功能使用
控制器,主要註釋帶@ApiXX
package com.imooc.controller;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.imooc.entity.Product;
import com.imooc.service.ProductService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@RestController
@RequestMapping("/products")
@Api(tags="order", description="產品相關")
public class ProductController {
private static Logger log = LoggerFactory.getLogger(ProductController.class);
@Autowired
private ProductService productService;
@ApiOperation(notes="根據隊員業務規劃新增相應產品", value="建立產品")
@PostMapping
public Product addProduct(@RequestBody Product product){
log.debug("建立產品,引數:{}",product);
Product result = productService.addProduct((product));
log.debug("建立產品,結果:{}",result);
return result;
}
@GetMapping("/{id}")
public Product findOne(@PathVariable String id){
log.debug("查詢單個產品,id={}", id);
Product product = productService.findOne(id);
log.debug("查詢單個產品,結果={}", product);
return product;
}
@GetMapping
public Page<Product> query(String ids, BigDecimal minRewardRate, BigDecimal maxRewardRate, String status,
@RequestParam(defaultValue = "0")int pageNum, @RequestParam(defaultValue = "10") int pageSize){
log.info("查詢產品,idList={},minRewardRate={},maxRewardRate={},statusList={},pageNum={},pageSize={}",ids, minRewardRate,maxRewardRate,status,pageNum,pageSize);
List<String> idList = null;
List<Integer> statusList = null;
if(!StringUtils.isEmpty(ids)){
idList = Arrays.asList(ids.split(","));
}
if(!StringUtils.isEmpty(statusList)){
String[] statusStr = status.split(",");
// statusStr.m
Integer[] statusInt = new Integer[statusStr.length];
for(int i=0; i<statusStr.length; i++){
statusInt[i] = Integer.parseInt(statusStr[i]);
}
statusList = Arrays.asList(statusInt);
}
Pageable pageable = PageRequest.of(pageNum, pageSize);
Page<Product> page = productService.query(idList, minRewardRate, maxRewardRate, statusList, pageable);
log.info("查詢產品,結果={}", page);
return page;
}
}
實體類中使用
@ApiModel(value="ppp", description="產品模型")
@Entity
@Table(name="product_t")
public class Product {
@Id
@Column(name="id",columnDefinition="varchar(50) comment '產品編號'")
private String id;
@Column(name="name",columnDefinition="varchar(50) not null default '' comment '產品名稱'")
private String name;
/**
* @see com.imooc.entity.enums.ProductStatus
*/
@ApiModelProperty(value="狀態", dataType="com.imooc.entity.enums.ProductStatus")
@Column(name="status",columnDefinition="smallint(6) not null default 0 comment '狀態,1:稽核中、2:銷售中、3:暫停銷售、4:已結束' ")
private Integer status;
}