首先感谢若依给大家提供的框架,让我们开发更加快速且保发。
首先删掉若依本身的swagge,开始我们的集成吧!
1.导入依赖
<!-- swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.9.6</version>
</dependency>
2.配置xml
#################################### Swagger start #################################
swagger:
# 是否启用
enable: true
base:
# 扫描的包,多个包使用逗号隔开
package: io.geekidea.springbootplus
contact:
email: geekidea@qq.com
name: springboot.plus
url: https://springboot.plus
description:
title: 夕阳接口文档
url: https://springboot.plus
version: ${project.version}
# 请求前缀
pathMapping: /dev-api
3.配置参数类
/*
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.ruoyi.framework.config.properties;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* Swagger配置属性
*
* @author geekidea
* @date 2020/3/21
**/
@Data
@Component
@ConfigurationProperties(prefix = "swagger")
public class SwaggerProperties {
/**
* 是否启用Swagger
*/
private boolean enable;
/** 设置请求的统一前缀 */
@Value("${swagger.pathMapping}")
private String pathMapping;
/**
* 扫描的基本包
*/
@Value("${swagger.base.package}")
private String basePackage;
/**
* 联系人邮箱
*/
@Value("${swagger.contact.email}")
private String contactEmail;
/**
* 联系人名称
*/
@Value("${swagger.contact.name}")
private String contactName;
/**
* 联系人网址
*/
@Value("${swagger.contact.url}")
private String contactUrl;
/**
* 描述
*/
private String description;
/**
* 标题
*/
private String title;
/**
* 网址
*/
private String url;
/**
* 版本
*/
private String version;
/**
* 自定义参数配置
*/
@NestedConfigurationProperty
private List<ParameterConfig> parameterConfig;
/**
* 自定义参数配置
*/
@Data
public static class ParameterConfig {
/**
* 名称
*/
private String name;
/**
* 描述
*/
private String description;
/**
* 参数类型
* header, cookie, body, query
*/
private String type = "head";
/**
* 数据类型
*/
private String dataType = "String";
/**
* 是否必填
*/
private boolean required;
/**
* 默认值
*/
private String defaultValue;
}
}
4.配置swagger配置类
package com.ruoyi.framework.config;
import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
import com.google.common.collect.Lists;
import com.ruoyi.common.enums.ExceptionEnum;
import com.ruoyi.framework.config.properties.SwaggerProperties;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestMethod;
import springfox.documentation.builders.*;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import org.springframework.context.annotation.Bean;
import java.util.*;
@Configuration
@EnableSwagger2
@EnableSwaggerBootstrapUI
public class Swagger2Config {
@Autowired
private SwaggerProperties swaggerProperties;
@Bean(value = "adminApi")
public Docket adminApi() {
ParameterBuilder parameterBuilder = new ParameterBuilder();
List<Parameter> parameters = Lists.newArrayList();
parameterBuilder.name("Authorization").description("token令牌").modelRef(new ModelRef("String")).parameterType("header").required(true).build();
parameters.add(parameterBuilder.build());
Docket docket = new Docket(DocumentationType.SWAGGER_2).useDefaultResponseMessages(false).consumes(initConsumes()).produces(initProduces())
.globalResponseMessage(RequestMethod.POST, initResponseCode())
.apiInfo(apiInfo())
.groupName("后台管理")
.select()
.apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.system.controller"))
.paths(PathSelectors.any())
.build().globalOperationParameters(parameters)
.securitySchemes(securitySchemes())
.securityContexts(Lists.newArrayList(securityContext()))
.pathMapping(swaggerProperties.getPathMapping());
return docket;
}
/**
* 安全模式,这里指定token通过Authorization头请求头传递
*/
private List<SecurityScheme> securitySchemes()
{
List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));
return apiKeyList;
}
/**
* 获取apiInfo
*
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(swaggerProperties.getTitle())
.description(swaggerProperties.getDescription())
.termsOfServiceUrl(swaggerProperties.getUrl())
.contact(new Contact(swaggerProperties.getContactName(), swaggerProperties.getContactUrl(), swaggerProperties.getContactEmail()))
.version(swaggerProperties.getVersion())
.build();
}
// 定义全局相应状态码
private List<ResponseMessage> initResponseCode() {
List<ResponseMessage> responseMessageList = new ArrayList<>();
Arrays.stream(ExceptionEnum.values()).forEach(errorEnum -> {
responseMessageList.add(
new ResponseMessageBuilder().code(errorEnum.getCode()).message(errorEnum.getMsg()).responseModel(
new ModelRef(errorEnum.getMsg())).build()
);
});
return responseMessageList;
}
// 定义全局请求参数类型
private Set<String> initConsumes() {
Set<String> sets = new HashSet<>();
sets.add("application/x-www-form-urlencoded");
return sets;
}
// 定义全局返回数据类型
private Set<String> initProduces() {
Set<String> sets = new HashSet<>();
sets.add("application/json");
return sets;
}
/**
* 安全上下文
*/
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.regex("/.*"))
.build();
}
/**
* 默认的安全上引用
*/
List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Lists.newArrayList(new SecurityReference("Authorization", authorizationScopes));
}
}
有个自定义的错误代码类:
package com.ruoyi.common.enums;
public enum ExceptionEnum {
UNKNOWN_ERROR(-1, "数据获取失败"),
;
private Integer code;
private String msg;
ExceptionEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
整个后台跑起来后,运行管理后台
管理后台启动后,登陆,进入
整个流程就可以了