springboot集成整合Swagger2
一 基础整合步骤
1,创建一个springboot web应用 不做过多陈述.
2,配置pom 文件
<!-- 整合swagger2 api文档 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
3.配置专有bean
@Configuration
public class Swagger2 {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.hnwhy.cultureCloud.controller"))
.paths(PathSelectors.any())
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("springboot利用swagger构建api文档")
.description("简单优雅的restfun风格")
.version("1.0")
.build();
}
}
4,启动类配置
5.control层 配置示例
6,启动项目后 访问地址
http://localhost:xxxx(端口)/swagger-ui.html
二 扩展部分
实现同一接口支持多种Content-type(application/json、application/x-www-form-urlencoded等) 方式 的swagger 测试访问 。
工具类如下:
public class RequestMapToUtil {
/**
* 获取 request 中用POST方式"Content-type"是 "text/plain"发送的 json数据
*
* @author: sgy
* @date: 2018年8月28日
* @param request
* @return
* @throws IOException
*/
public static Map<String, String> getPostByTextPlain(HttpServletRequest request) {
// application/json
// application/x-www-form-urlencoded
try {
if (request.getContentType()!=null&&(request.getContentType().contains("application/json")
|| request.getContentType().contains("text/plain"))) {
String s = request.getQueryString();
BufferedReader reader = request.getReader();
char[] buf = new char[512];
int len = 0;
StringBuffer contentBuffer = new StringBuffer();
while ((len = reader.read(buf)) != -1) {
contentBuffer.append(buf, 0, len);
}
String content = contentBuffer.toString();
Map<String, String[]> map = null;
// 根据json数据中对象的key值及其类型取出相应的参数值
//map = parseQueryString(content);
map = parseQueryJsonString(content);
Map<String, String> params = new HashMap<String, String>(map.size());
int len1;
for (Map.Entry<String, String[]> entry : map.entrySet()) {
len1 = entry.getValue().length;
if (len1 == 1) {
params.put(entry.getKey(), entry.getValue()[0]);
} else if (len1 > 1) {
params.put(entry.getKey(), entry.getValue().toString());
}
}
// params = addHeaders(request,params);
return params;
} else if (request.getContentType()!=null&&(request.getContentType().contains("application/x-www-form-urlencoded")
|| request.getContentType().contains("multipart/form-data"))) {
Map<String, String[]> map = null;
if (request.getMethod().equalsIgnoreCase("POST")) {
map = request.getParameterMap();
}
Map<String, String> params = new HashMap<String, String>(map.size());
int len;
for (Map.Entry<String, String[]> entry : map.entrySet()) {
len = entry.getValue().length;
if (len == 1) {
params.put(entry.getKey(), entry.getValue()[0]);
} else if (len > 1) {
params.put(entry.getKey(), entry.getValue().toString());
}
}
// params = addHeaders(request,params);
return params;
// } else if (request.getContentType()==null){
} else {
Map<String, String[]> map = null;
// 为GET请求时就获取其请求参数的那段信息
String s = request.getQueryString();
if (StringUtils.isBlank(s)) {
return new HashMap<String, String>();
}
try {
// 将得到的HTML数据用UTF-8转码
s = URLDecoder.decode(s, "UTF-8");
} catch (UnsupportedEncodingException e) {
}
map = parseQueryString(s);
Map<String, String> params = new HashMap<String, String>(map.size());
int len;
for (Map.Entry<String, String[]> entry : map.entrySet()) {
len = entry.getValue().length;
if (len == 1) {
params.put(entry.getKey(), entry.getValue()[0]);
} else if (len > 1) {
params.put(entry.getKey(), entry.getValue().toString());
}
}
return params;
}
} catch (Exception e) {
return null;
}
}
//转json数据
private static Map<String, String[]> parseQueryJsonString(String content) {
System.out.println(content);
JSONObject jsonObject = JSON.parseObject(content);
Map<String, String[]> res =new HashMap<String, String[]>();
Map m = jsonObject;
m.forEach((k,v)->{
res.put(k.toString(), v.toString().split(","));
});
return res;
}
// 解析请求
private static Map<String, String[]> parseQueryString(String queryString) {
Map<String, String[]> map = new HashMap<String, String[]>();
String[] params = queryString.split("&");
for (String param : params) {
String name = param.split("=")[0];
String[] value = param.split("=")[1].split(",");
map.put(name, value);
}
return map;
}
// 解析header数据
private static Map<String, String> addHeaders(HttpServletRequest request, Map<String, String> params) {
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
String value = request.getHeader(key);
params.put(key, value);
}
return params;
}
public static Map<String, Object> getPostByTextPlainToObj(HttpServletRequest request) {
// application/json
// application/x-www-form-urlencoded
try {
if (request.getContentType().contains("application/json")
|| request.getContentType().contains("text/plain")) {
String s = request.getQueryString();
BufferedReader reader = request.getReader();
char[] buf = new char[512];
int len = 0;
StringBuffer contentBuffer = new StringBuffer();
while ((len = reader.read(buf)) != -1) {
contentBuffer.append(buf, 0, len);
}
String content = contentBuffer.toString();
Map<String, Object[]> map = null;
// 根据json数据中对象的key值及其类型取出相应的参数值
map = parseQueryStringToObj(content);
Map<String, Object> params = new HashMap<String, Object>(map.size());
int len1;
for (Map.Entry<String, Object[]> entry : map.entrySet()) {
len1 = entry.getValue().length;
if (len1 == 1) {
params.put(entry.getKey(), entry.getValue()[0]);
} else if (len1 > 1) {
params.put(entry.getKey(), entry.getValue());
}
}
// params = addHeaders(request,params);
return params;
} else if (request.getContentType().contains("application/x-www-form-urlencoded")
|| request.getContentType().contains("multipart/form-data")) {
Map<String, String[]> map = null;
if (request.getMethod().equalsIgnoreCase("POST")) {
map = request.getParameterMap();
}
Map<String, Object> params = new HashMap<String, Object>(map.size());
int len;
for (Map.Entry<String, String[]> entry : map.entrySet()) {
len = entry.getValue().length;
if (len == 1) {
params.put(entry.getKey(), entry.getValue()[0]);
} else if (len > 1) {
params.put(entry.getKey(), entry.getValue());
}
}
// params = addHeaders(request,params);
return params;
// } else if (request.getContentType()==null){
} else {
Map<String, Object[]> map = null;
// 为GET请求时就获取其请求参数的那段信息
String s = request.getQueryString();
if (StringUtils.isBlank(s)) {
return new HashMap<String, Object>();
}
try {
// 将得到的HTML数据用UTF-8转码
s = URLDecoder.decode(s, "UTF-8");
} catch (UnsupportedEncodingException e) {
}
map = parseQueryStringToObj(s);
Map<String, Object> params = new HashMap<String, Object>(map.size());
int len;
for (Map.Entry<String, Object[]> entry : map.entrySet()) {
len = entry.getValue().length;
if (len == 1) {
params.put(entry.getKey(), entry.getValue()[0]);
} else if (len > 1) {
params.put(entry.getKey(), entry.getValue());
}
}
return params;
}
} catch (Exception e) {
return null;
}
}
// 解析请求
private static Map<String, Object[]> parseQueryStringToObj(String queryString) {
Map<String, Object[]> map = new HashMap<String, Object[]>();
String[] params = queryString.split("&");
for (String param : params) {
String name = param.split("=")[0];
Object[] value = param.split("=")[1].split(",");
map.put(name, value);
}
return map;
}
// 解析header数据
private static Map<String, Object> addHeadersToObj(HttpServletRequest request, Map<String, Object> params) {
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
Object value = request.getHeader(key);
params.put(key, value);
}
return params;
}
// 读取流文件
public static Map<String, Object> getPostByTextPlain(HttpServletRequest request,String fileKey) throws Exception {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
// 判断是否是多数据段提交格式
Map<String, Object> rs = new HashMap<>();
if(!"".equals(fileKey)){
if (multipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
List<MultipartFile> fileList= multiRequest.getFiles(fileKey);
rs.put("fileList", fileList);
}
}
Map<String, String>param = RequestMapToUtil.getPostByTextPlain(request);
rs.put("param", param);
return rs;
}
}
结语: 扩展部分工具类同时支持 多种请求方式,方便swagger 进行后台测试。
有疑问,请求留言 交流QQ:1360215811