SpringBoot---Swagger文档管理应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangminemail/article/details/83243585

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

扫描二维码关注公众号,回复: 3870463 查看本文章
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;
}

猜你喜欢

转载自blog.csdn.net/zhangminemail/article/details/83243585