1. 程式人生 > >SSM框架整合Swagger2(非maven專案者進)

SSM框架整合Swagger2(非maven專案者進)

首先網上已經有很多關於springMVC整合swagger2的帖子了,但是本人的專案並不是maven的專案,可能銀行業幹久了,框架什麼的還是比較久,但是我相信國內還是很多專案都還不是maven的專案。(當然會存在歷史問題的專案的嘛)
好了廢話不多說了,下面是關於SSM框架整合swagger2的步驟,希望對大家有所幫助。
1)引入swagger一系列關聯的包,原來的SSM框架的包保留,額外引入下面的包,如果已經存在相應的包就不用重複引入,別以為包多不壓身,會出現包衝突問題的,那時候又要哭去了。2)新增一個包,下面放swagger的一個配置類。此地方我命名為SwaggerConfig.java
package com.yusys.swagger;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.async.DeferredResult;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;


@Configuration //配置註解
@EnableSwagger2 //啟用swagger2
@EnableWebMvc //非springboot框架需要引入
@ComponentScan(basePackages = {"com.yusys.swagger"}) //掃描包
public class SwaggerConfig extends WebMvcConfigurerAdapter{
	
	private String version = "1.0";
	@Bean
	public Docket api(){
		return new Docket(DocumentationType.SWAGGER_2)
		.groupName("business-api")
		.genericModelSubstitutes(DeferredResult.class)
		.forCodeGeneration(false)
		.select()// 選擇哪些路徑和API會生成document
		.apis(RequestHandlerSelectors.any())// 對所有api進行監控
		.paths(PathSelectors.any())// 對所有路徑進行監控
		.build()
		.apiInfo(apiInfo());
	}
	
	private ApiInfo apiInfo(){
		ApiInfo apiInfo = new ApiInfoBuilder()
				.title("中石化資訊管理系統介面API")
				.description("中石化資訊管理系統api")
				.termsOfServiceUrl("127.0.0.1:8888/Sinopec_infomation_system/api-docs")
				.version(version)
				.build();
		return apiInfo;
	}
	
}
3)在spring-mvc.xml中增加swaggerConfig的bean,讓它交給spring進行管理。
<!-- 開啟註解功能 -->
 
    <mvc:annotation-driven />
 
    <!--將靜態資源交由預設的servlet處理-->
 
 <mvc:default-servlet-handler />
 
    <!--向容器自動注入配置-->
 
    <context:annotation-config />
<
<!-- 將swaggerconfig配置類注入 -->
<
<bean class="com.yusys.swagger.SwaggerConfig"/>
<
<mvc:resources mapping="swagger-ui.html" location="classpath:/" />
<
<mvc:resources mapping="/webjars/**" location="classpath:/webjars/" />

注意:com.yusys.swagger.SwaggerConfig為我本地類的包路徑,具體放在什麼地方自己配置。
其中swagger-ui.html對應的location為classpath:/是因為生成的註解檔案會放在根目錄下。4)修改web.xml
<servlet>
 
        <servlet-name>springmvc</servlet-name>
 
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
 
        <init-param>
 
            <param-name>contextConfigLocation</param-name>
 
            <param-value>classpath:spring-mvc.xml</param-value>
 
        </init-param>
 
        <load-on-startup>1</load-on-startup>
<
<servlet-mapping>
 
     <servlet-name>springmvc</servlet-name>
 
     <url-pattern>/</url-pattern>
<
</servlet-mapping>
這個地方必須配置,如果你配置的是*.XXX的形式會出現api-docs訪問出錯,這就會導致swagger-ui找不到api的有效路徑。使swagger無法正常工作。5)下載swagger-ui的檔案,官網https://swagger.io/tools/swagger-ui/
下載完成後解壓出來,把dist資料夾下面的所有檔案複製到你當前專案的webContent下面。
6)修改index.html
把js部分的url修改成url: "127.0.0.1:8888/xxxx/v2/api-docs",其中xxxx為你當前專案名。7)在controller層增加swagger的註解,此處只是一個例子。具體api可以檢視swagger的文件
package com.isoftstone.api.customerDept.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.isoftstone.api.common.log.target.SystemControllerLog;
import com.isoftstone.api.common.utils.web.JsonResult;
import com.isoftstone.api.common.utils.web.StatusUtil;
import com.isoftstone.api.customerDept.entity.CustomerDept;
import com.isoftstone.api.customerDept.service.CustomerDeptService;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;

@RestController
@RequestMapping("customerDept")
@Api(value="客戶部門管理",tags="客戶部門管理模組介面Api")
public class CustomerDeptController {

	@Autowired
	private CustomerDeptService	customerDeptService;
	
	@ApiOperation(value="客戶部門資訊建立",notes="客戶部門資訊建立")
	@SystemControllerLog(description="客戶部門資訊建立")
	@RequestMapping(value="/create",method=RequestMethod.POST)
	public JsonResult create(@RequestBody CustomerDept customerDept){
		return customerDeptService.create(customerDept);
	}
	
}
8)訪問swagger-ui.html