在使用spring boot進行開發接口時,很好用的就是swagger2接口文檔,自動生成文檔后還能進行測試。spring boot項目集成swagger2就比較容易,但是我在spring mvc的項目中集成swagger2的時候遇到了不少問題,現記錄下,方便以后工作中使用。
0.Spring MVC配置文件中的配置
?
- <!--?設置使用注解的類所在的jar包,只加載controller類?-->? <span?style="white-space:pre">????</span><context:component-scan?base-package="com.jay.plat.config.controller"?/>?
- <!--?使用?Swagger?Restful?API文檔時,添加此注解?-->? <mvc:default-servlet-handler?/>? 、
- <mvc:resources?mapping="swagger-ui.html"?location="classpath:/META-INF/resources/"/>
<mvc:resources?mapping="/webjars/**"?location="classpath:/META-INF/resources/webjars/"/>?
- <!--?設置使用注解的類所在的jar包,只加載controller類?-->? <span?style="white-space:pre">????</span><context:component-scan?base-package="com.jay.plat.config.controller"?/>?
1.maven依賴
?
- <!--?構建Restful?API?-->??
- ??????????
- ????????<dependency>??
- ????????????<groupId>io.springfox</groupId>??
- ????????????<artifactId>springfox-swagger2</artifactId>??
- ????????????<version>2.4.0</version>??
- ????????</dependency>??
- ????????<dependency>??
- ????????????<groupId>io.springfox</groupId>??
- ????????????<artifactId>springfox-swagger-ui</artifactId>??
- ????????????<version>2.4.0</version>??
- ????????</dependency>?
?
?
2.Swagger配置文件
/** Restful API 訪問路徑:* http://IP:port/{context-path}/swagger-ui.html* eg:http://localhost:8080/jd-config-web/swagger-ui.html*/ @EnableWebMvc @EnableSwagger2 @ComponentScan(basePackages = {"com.thinkgem.jeesite.modules.rmi.web"}) @Configuration public class RestApiConfig extends WebMvcConfigurationSupport {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("com.thinkgem.jeesite.modules.rmi.web")).paths(PathSelectors.any()).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("售電平臺接入數據 APIs").termsOfServiceUrl("http://blog.csdn.net/he90227").contact("售電PC").version("1.1").build();} }
?
?
3.Controller中使用注解添加API文檔
?
/**** Created by kwt on 2017/8/23.*/ @Controller @RequestMapping("${adminPath}/rmi/test/tools") @Api( value = "設備管理測試", description = "設備管理-測試") public class TestAmmeterToolsController {@Autowiredprivate AmmeterToolsUtil ammeterToolsUtil;/*** 用戶登錄* @return*/@ApiOperation(value="用戶登錄接口",notes="用戶登錄接口" ,httpMethod = "POST")@RequestMapping(value = "/login", method = RequestMethod.POST)@ResponseBodypublic Object login() {LoginReq loginReq = new LoginReq();loginReq.setUserName("");loginReq.setPassword("");loginReq.setTypeName("");LoginResp login = ammeterToolsUtil.login(loginReq);return login;}/*** 用戶下網關查詢* @return*/@ApiOperation(value="用戶網關查詢",notes="用戶網關查詢" ,httpMethod = "POST")@RequestMapping(value = "/queryGateWay", method = RequestMethod.POST)@ResponseBodypublic Object queryGateWay() {QueryGatewayResp queryGatewayResp = ammeterToolsUtil.queryGateway();return queryGatewayResp;}/*** 網關注冊* @return*/@ApiOperation(value="網關注冊",notes="網關注冊" ,httpMethod = "POST")@RequestMapping(value = "/registGateway", method = RequestMethod.POST)@ResponseBodypublic Object registGateway() {RegistGatewayReq registGatewayReq = new RegistGatewayReq();registGatewayReq.setGatewayId((long)0);//網關idregistGatewayReq.setAddress("sjz");//網關安裝地址registGatewayReq.setGatewayName("test001");registGatewayReq.setTime("2018-08-08");RegistGatewayResp regist = ammeterToolsUtil.registGateway(registGatewayReq);return regist;}/*** 網關修改* @return*/@ApiOperation(value="網關修改",notes="網關修改" ,httpMethod = "POST")@RequestMapping(value = "/POSTWayEdit", method = RequestMethod.POST)@ResponseBodypublic Object getWayEdit() {RegistGatewayReq registGatewayReq = new RegistGatewayReq();registGatewayReq.setGatewayId((long)527);//網關idregistGatewayReq.setAddress("sjz888");//網關安裝地址registGatewayReq.setGatewayName("test888");registGatewayReq.setTime("2018-08-08");RegistGatewayResp regist = ammeterToolsUtil.registGateway(registGatewayReq);return regist;}/*** 刪除網關* @return*/@ApiOperation(value="刪除網關",notes="刪除網關" ,httpMethod = "POST")@RequestMapping(value = "/deleteGateway", method = RequestMethod.POST)@ResponseBodypublic Object deleteGateway() {DeleteGatewayReq deleteGatewayReq = new DeleteGatewayReq();List<Long> gatewayIdList = new ArrayList<>();gatewayIdList.add((long)535);deleteGatewayReq.setGatewayIdList(gatewayIdList);DeleteGatewayResp deleteGatewayResp = ammeterToolsUtil.deleteGateway(deleteGatewayReq);return deleteGatewayResp;}/*** 查詢網關下設備* @return*/@ApiOperation(value="查詢網關下設備",notes="查詢網關下設備" ,httpMethod = "POST")@RequestMapping(value = "/queryDevice", method = RequestMethod.POST)@ResponseBodypublic Object queryDevice() {QueryDeviceReq queryDeviceReq = new QueryDeviceReq();queryDeviceReq.setGatewayId((long)527);QueryDeviceResp queryDeviceResp = ammeterToolsUtil.queryDevice(queryDeviceReq);return queryDeviceResp;}/*** 網關下添加設備* @return*/@ApiOperation(value="網關下添加設備",notes="網關下添加設備" ,httpMethod = "POST")@RequestMapping(value = "/addDevice", method = RequestMethod.POST)@ResponseBodypublic Object addDevice() {AddDeviceReq addDeviceReq = new AddDeviceReq();addDeviceReq.setDeviceNo("設備編號——001");addDeviceReq.setDeviceName("設備名稱");//addDeviceReq.setDeviceLabelInfoList();addDeviceReq.setGatewayId((long)534);addDeviceReq.setDeviceId((long)0);/* addDeviceReq.setDeviceTypeId();addDeviceReq.setOrderInGateway();addDeviceReq.setProtocolInfoList();addDeviceReq.setProtocolTypeId();addDeviceReq.setStartAddr();addDeviceReq.setTempletTypeId();*/AddDeviceResp addDeviceResp = ammeterToolsUtil.addDevice(addDeviceReq);return addDeviceResp;} }
?
?
?
?
?
4.效果展示
訪問路徑:http://IP:port//swagger-ui.html
參考:http://blog.csdn.net/phantomes/article/details/52334591
注:我在spring mvc中配置時沒有做第0步驟,但是能夠生成文檔,具體的原因還有待研究;
接下來就是對UI界面的優化,目前生成的界面不方便看,還比較丑,所以就集成了一個UI項目。
訪問路徑:http://localhost:8080/doc.html
參考:https://git.oschina.net/xiaoym/swagger-bootstrap-ui
注:原作者還沒有將最新版本發布到maven中央倉庫,所以無法使用,本人使用的是舊版本。依賴如下:
<dependency>
<groupId>com.drore.cloud</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.4</version>
</dependency>
使用該依賴替換集成swagger2時使用的UI依賴即可。
當時按照spring boot項目集成的插件進行設置,但是在接口名稱上沒有生成,還有待研究,先寫下一個不太完整的日志。