Spring 4.2.2以上版本和swagger集成方案和踩过的坑

因为公司使用的spring版本太高,在集成swagger的时候会存在一些问题,而网上的很多实例大多都是版本比较低的,为了是朋友们少才坑,我这边将集成的过程记录一下:

1. 引入spring、swagger的相关jar包(springfox-swagger2、springfox-swagger-ui),在pom.xml中配置:

Xml代码

io.springfox

springfox-swagger2

2.4.0

org.springframework

spring-core

org.springframework

spring-beans

org.springframework

spring-context

org.springframework

spring-context-support

org.springframework

spring-aop

org.springframework

spring-tx

org.springframework

spring-orm

org.springframework

spring-jdbc

org.springframework

spring-web

org.springframework

spring-webmvc

org.springframework

spring-oxm

io.springfox

springfox-swagger-ui

2.4.0

io.springfox

springfox-swagger2

2.4.0

org.springframework

spring-core

org.springframework

spring-beans

org.springframework

spring-context

org.springframework

spring-context-support

org.springframework

spring-aop

org.springframework

spring-tx

org.springframework

spring-orm

org.springframework

spring-jdbc

org.springframework

spring-web

org.springframework

spring-webmvc

org.springframework

spring-oxm

io.springfox

springfox-swagger-ui

2.4.0

提醒: 特别注意,springfox-swagger2在集成的时候,已经引入了spring的相关jar,特别是spring-context、spring-context-support的版本和项目中使用的版本完全不一致,项目在启动的时候出现很多包冲突的问题,这边在引入pom.xml文件的时候过滤掉了spring的相关jar包,如绿色标志。

2. 编写Swagger的配置类:

Java代码

package com.ml.honghu.swagger.web;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import springfox.documentation.builders.ApiInfoBuilder;

import springfox.documentation.builders.PathSelectors;

import springfox.documentation.builders.RequestHandlerSelectors;

import springfox.documentation.service.ApiInfo;

import springfox.documentation.service.Contact;

import springfox.documentation.spi.DocumentationType;

import springfox.documentation.spring.web.plugins.Docket;

import springfox.documentation.swagger2.annotations.EnableSwagger2;

@EnableWebMvc

@EnableSwagger2

@Configuration

@ComponentScan(basePackages ={"com.ml.honghu.**.rest"})

publicclass SwaggerConfig {

@Bean

public Docket createRestApi() {

returnnew Docket(DocumentationType.SWAGGER_2)

.apiInfo(apiInfo())

.select()

.apis(RequestHandlerSelectors.basePackage("com.ml.honghu"))

.paths(PathSelectors.any())

.build();

}

private ApiInfo apiInfo() {

returnnew ApiInfoBuilder()

.title("接口列表 v1.0")

.description("接口信息")

.termsOfServiceUrl("http://honghu.com")

.contact(new Contact("","","HongHu"))

.version("1.1.0")

.build();

}

}

package com.ml.honghu.swagger.web;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.EnableWebMvc;

import springfox.documentation.builders.ApiInfoBuilder;

import springfox.documentation.builders.PathSelectors;

import springfox.documentation.builders.RequestHandlerSelectors;

import springfox.documentation.service.ApiInfo;

import springfox.documentation.service.Contact;

import springfox.documentation.spi.DocumentationType;

import springfox.documentation.spring.web.plugins.Docket;

import springfox.documentation.swagger2.annotations.EnableSwagger2;

@EnableWebMvc

@EnableSwagger2

@Configuration

@ComponentScan(basePackages ={"com.ml.honghu.**.rest"})

public class SwaggerConfig {

@Bean

public Docket createRestApi() {

return new Docket(DocumentationType.SWAGGER_2)

.apiInfo(apiInfo())

.select()

.apis(RequestHandlerSelectors.basePackage("com.ml.honghu"))

.paths(PathSelectors.any())

.build();

}

private ApiInfo apiInfo() {

return new ApiInfoBuilder()

.title("接口列表 v1.0")

.description("接口信息")

.termsOfServiceUrl("http://honghu.com")

.contact(new Contact("", "", "HongHu"))

.version("1.1.0")

.build();

}

}

提醒:注意红色标注的地方

3. 在spring-mvc.xml文件中进行过滤器的配置,过滤掉swagger的相关访问配置:

Java代码

4. 服务配置项

Java代码

@Api("区域服务")

@RestController

@RequestMapping(value ="/rest/area")

publicclass AreaService  {

@Autowired

private AreaService areaService;

@ApiOperation(value ="区域列表", httpMethod ="GET", notes ="区域列表")

@IsLogin

@ResponseBody

@RequestMapping(value ="treeData", method = RequestMethod.GET)

public List> treeData(

@ApiParam(required =true, value ="区域ID")@RequestParam(required=false) String extId, HttpServletResponse response) {

List> mapList = Lists.newArrayList();

List list = areaService.findAll();

for (int i=0; i

Area e = list.get(i);

if (StringUtils.isBlank(extId) || (extId!=null && !extId.equals(e.getId()) && e.getParentIds().indexOf(","+extId+",")==-1)){

Map map = Maps.newHashMap();

map.put("id", e.getId());

map.put("pId", e.getParentId());

map.put("name", e.getName());

mapList.add(map);

}

}

return mapList;

}

}

@Api("区域服务")

@RestController

@RequestMapping(value = "/rest/area")

public class AreaService  {

@Autowired

private AreaService areaService;

@ApiOperation(value = "区域列表", httpMethod = "GET", notes = "区域列表")

@IsLogin

@ResponseBody

@RequestMapping(value = "treeData", method = RequestMethod.GET)

public List> treeData(

@ApiParam(required = true, value = "区域ID")  @RequestParam(required=false) String extId, HttpServletResponse response) {

List> mapList = Lists.newArrayList();

List list = areaService.findAll();

for (int i=0; i

Area e = list.get(i);

if (StringUtils.isBlank(extId) || (extId!=null && !extId.equals(e.getId()) && e.getParentIds().indexOf(","+extId+",")==-1)){

Map map = Maps.newHashMap();

map.put("id", e.getId());

map.put("pId", e.getParentId());

map.put("name", e.getName());

mapList.add(map);

}

}

return mapList;

}

}

4. 启动项目,查看结果:

愿意了解框架技术或者源码的朋友直接求求交流分享技术:3133806896

分布式的一些解决方案,有愿意了解的朋友可以找我们团队探讨

更多详细源码参考来源

转载于:https://my.oschina.net/u/3723158/blog/1568054

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值