版本
def swagger2_version = "2.9.2"
implementation("io.springfox:springfox-swagger2:$swagger2_version")
//implementation("io.springfox:springfox-swagger-ui:$swagger2_version")
implementation("com.github.xiaoymin:swagger-bootstrap-ui:1.9.6")//第三方的ui
Swagger2Config
@EnableSwagger2
@Configuration
@Profile({"develop", "test"})
public class Swagger2Config implements WebMvcConfigurer {
//配置拦截器不拦截的路径, 根目录以及其他特定开发功能路径
@Bean(name = "excludePath")
public List<String> swaggerPathPattern() {
return Lists.newArrayList("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**", "/api-docs");
}
//配置swagger信息的ApiInfo
private ApiInfo apiInfo(){
//作者的联系方式
return new ApiInfoBuilder()
.title("aaaak hello")
.description("Restful API")
.contact(new Contact("aaaak", "https://www.baidu.com", "1111111@qq.com"))
.version("1.0")
.build();
}
//配置content type
private static final Set<String> DEFAULT_PRODUCES_AND_CONSUMES =
new HashSet<String>(Arrays.asList("application/json","application/xml"));
// 根据 docket 配置多个 分组
@Bean()
public Docket baseDocket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.consumes(DEFAULT_PRODUCES_AND_CONSUMES)
.produces(DEFAULT_PRODUCES_AND_CONSUMES)
.globalOperationParameters(globalOperationParameters())
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(Controller.class))//根据注解Controller 找接口
.paths(PathSelectors.any())//全路径的 接口
.build();
}
@Bean()
public Docket docket2() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo)
.consumes(DEFAULT_PRODUCES_AND_CONSUMES)
.produces(DEFAULT_PRODUCES_AND_CONSUMES)
.ignoredParameterTypes(Error.class)// 忽略 指定参数
.groupName("调查问卷模块") //分组
.globalOperationParameters(globalOperationParameters())
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.paths(PathSelectors.ant("/api/**"))//筛选指定路径下的 接口到指定分组
.build();
}
//配置请求 接口文档路径
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/").setCacheControl(CacheControl.noCache());
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/")
.setCacheControl(CacheControl.noCache());
}
/**
* 所有请求都添加的统一参数(或者头)信息
* @return
*/
private List<Parameter> globalOperationParameters() {
List<Parameter> pars = new ArrayList<>();
pars.add(new ParameterBuilder().name("_Device").defaultValue("861925033630951").description("设备唯一标识")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().name("_Hardware").defaultValue("HUAWEI_JDN-AL00").description("设备号")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().hidden(true).name("_OS").defaultValue("Android-23").description("平台类型")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().hidden(true).name("_Channel").defaultValue("rtm").description("请求渠道")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().hidden(true).name("_Timestamp").defaultValue(String.valueOf(System.currentTimeMillis())).description("时间戳")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().hidden(true).name("_AppName").defaultValue("com.microcardio.wxdoctor").description("客户端名字")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().hidden(true).name("_AppVersion").defaultValue("4060").description("客户端版本")
.hidden(true).parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().name("_User").defaultValue("22525").description("请求医生id")
.parameterType("header").modelRef(new ModelRef("string")).build());
pars.add(new ParameterBuilder().name("_Hospital").defaultValue("12").description("医院id")
.parameterType("header").modelRef(new ModelRef("string")).build());
return pars;
}
}
Controller 使用
@RestController
@RequestMapping("/api")
@Api(tags = "问卷服务")
public class TestController {
@RequestMapping(value = "/test", method = RequestMethod.GET)
@ApiOperation(value = "基础问卷", notes = "基础问卷!!!!!!!!!!!!!!!", response = TestDto.class)
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", dataType = "int", name = "id", value = "类型 1,2,3,4,", required = true, defaultValue = "1"),
})
public String test(@RequestParam(name = "id") Integer id) {
return " hello api"+id;
}
}
DTO 使用
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value = "BaseDto对象", description = "问卷 base基本表 ")
public class BaseDto {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
private Integer id;
@ApiModelProperty(value = "患者姓名",example="aaaak")
private String patientName;
@ApiModelProperty(value = "患者身份证")
private String identityCard;
@ApiModelProperty(value = "添加时间")
private Long createTime;
@ApiModelProperty(value = "修改时间")
private Long modifiedTtime;
@ApiModelProperty(value = "关联医生id")
private Integer createId;
@ApiModelProperty(value = "问卷状态 ,1开启 ,2关闭")
private Integer state;
}
原ui 与第三方 ui对比