1. 程式人生 > >SpringMvc 3分鐘整合swagger2

SpringMvc 3分鐘整合swagger2

swagger:restful管理專案API工具

1、引入最新版本的swagger依賴,低版本的有一些bug。如hidden註解的欄位不生效

        <!-- swagger-mvc -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>1.1.0.Final</version>
        </dependency>
        <!-- swagger-mvc -->

2、在spring-mvc.xml中宣告swagger配置bean

<bean class="springfox.documentation.swagger2.configuration.Swagger2DocumentationConfiguration" id="swagger2Config"/>

也可以自定義swagger2Config配置替代上面的配置

<bean class="com.example.liuyaohua.core.config.Swagger2Config" id="swagger2Config"/>

自定義配置對應的java類

@Configuration
@EnableSwagger2
public class Swagger2Config extends WebMvcConfigurationSupport {
    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.liuyaohua.controller.swagger"))
                //.paths(regex("/product.*"))
                .build();
    }
}
com.example.liuyaohua.controller.swagger為指定swagger管理的包路徑,如果指定了在頁面中僅顯示該包路徑下的conrtorller入口

3、在spring-mvc.xml中配置資原始檔

	<mvc:resources location="classpath:/META-INF/resources/" mapping="swagger-ui.html"/>
	<mvc:resources location="classpath:/META-INF/resources/webjars/" mapping="/webjars/**"/>

4、controller樣例及說明

Name Description
@Api

Marks a class as a Swagger resource.

標識一個類是swagger資源 

Represents a single parameter in an API Operation.
A wrapper to allow a list of multiple ApiImplicitParam objects.

Provides additional information about Swagger models.

對模型(java類)進行說明,如http請求中接收引數

Adds and manipulates data of a model property.

對模型(java類)中的欄位進行說明

Describes an operation or typically a HTTP method against a specific path.

描述一個http請求的操作:可指定httpMethod

Adds additional meta-data for operation parameters.

欄位說明:表示對引數的新增元資料,可指定是否必傳 

Describes a possible response of an operation.
A wrapper to allow a list of multiple ApiResponse objects.
Declares an authorization scheme to be used on a resource or an operation.
Describes an OAuth2 authorization scope.
Represents a header that can be provided as part of the response.

The latest release also adds a number of annotations for adding extensions and metadata at the Swagger Definition level:

Name Description
Definition-level properties to be added to the generated Swagger definition
@Info General metadata for a Swagger definition
Properties to describe the contact person for a Swagger definition
Properties to describe the license for a Swagger definition
Adds an extension with contained properties
Adds custom properties to an extension

示例1:

@Api(description = "日誌相關")
@Controller
@RequestMapping("/log")
public class LogController {

	@Autowired
	private ILogDAO mapper;

	@ApiOperation(value = "查詢記錄(GET)", notes = "查詢記錄:http method is get", httpMethod = "GET", produces = MediaType.APPLICATION_JSON_VALUE)
	@RequestMapping(value = "/user/queryByGet.json",method = RequestMethod.GET)
	@ResponseBody
	public APIResponse<List<Log>> queryByGet(
			@ApiParam(required = true, hidden = false, value = "使用者名稱") @PathVariable String name,
			@ApiParam(required = true, hidden = false, value = "刪除標識",example = "true",allowableValues = "true|false") @PathVariable boolean flag,
			@ApiParam(required = true, value = "當前頁",allowableValues = "1,100",example = "5") @RequestParam("currentPage") int currentPage,
			@ApiParam(required = true, value = "每頁顯示數量") @RequestParam("pageSize") int pageSize) {
		Page page = new Page();
		page.setLow((currentPage - 1) * pageSize);
		page.setHight(currentPage * pageSize);
		page.setUsername(name);
		List<Log> logs = mapper.selectUserLogByPage(page);

		return APIResponse.returnSuccess(logs);
	}

	@ApiOperation(value = "查詢記錄(POST)", notes = "查詢記錄:http method is post", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_VALUE)
	@RequestMapping(value = "/user/queryByPost.json",method = RequestMethod.POST)
	@ResponseBody
	public APIResponse<List<Log>> queryByPost(
			@ApiParam(required = true, hidden = false, value = "使用者名稱") @PathVariable String name,
			@ApiParam(required = true, hidden = false, value = "刪除標識",example = "true",allowableValues = "true|false") @PathVariable boolean flag,
			@ApiParam(required = true, value = "當前頁",allowableValues = "1,5",example = "5") @RequestParam("currentPage") int currentPage,
			@ApiParam(required = true, value = "每頁顯示數量") @RequestParam("pageSize") int pageSize) {
		Page page = new Page();
		page.setLow((currentPage - 1) * pageSize);
		page.setHight(currentPage * pageSize);
		page.setUsername(name);
		List<Log> logs = mapper.selectUserLogByPage(page);

		return APIResponse.returnSuccess(logs);
	}
}

示例2:

@Api(description = "使用者資訊2")
@Controller("userController2")
@RequestMapping("/user2")
public class UserController2 {

    @Resource
    private IUserDAO iUserDAO;

    @Resource
    private ILogDAO iLogDAO;

    private Logger logger = LoggerFactory.getLogger(UserController2.class);

    @ApiOperation(value = "查詢使用者(GET)", notes = "查詢使用者詳細資訊", httpMethod = "GET", produces = MediaType.APPLICATION_JSON_VALUE)
    @RequestMapping(value = "/user/queryByGet.json", params = "name", method = RequestMethod.GET)
    @ResponseBody
    public APIResponse<User> queryByGet(
            @RequestParam(required = true) String name) {
        System.out.println("param name:" + name);
        User user = null;
        try {
            user = iUserDAO.selectUser(name);
            return APIResponse.returnSuccess(user);
        } catch (Exception e) {
            logger.info("查詢使用者失敗", e);
            e.printStackTrace();
            return APIResponse.returnFail("查詢使用者失敗");
        }
    }

    @ApiOperation(value = "新增使用者(POST)", notes = "新增使用者詳細資訊", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_VALUE)
    @RequestMapping(value = "/addByPost", method = RequestMethod.POST)
    @ResponseBody
    public APIResponse<Integer> addByPost(
            @RequestBody User user,
            HttpServletResponse response) {
        try {
            iUserDAO.addUser(user);
            // 記錄日誌
            Log logger = new Log();
            logger.setUserId(user.getId());
            logger.setType(LogTypeEnum.create_user);
            logger.setContent("create user:" + user.getName());
            logger.setCreatetime(new Date());
            iLogDAO.insertLog(logger);

            return APIResponse.returnSuccess(user.getId());
        } catch (Exception e) {
            e.printStackTrace();
            logger.info("新增使用者失敗", e);
            return APIResponse.returnFail("新增使用者失敗");
        }
    }
}

User傳入或返回引數說明樣例:

@ApiModel(value = "userInfo", description = "使用者資訊")
public class User {
    @ApiModelProperty(value = "id", required = true, example = "1000", allowableValues = "1,100")
    private int id;
    @ApiModelProperty(value = "使用者名稱", required = true, example = "張三")
    private String name;
    @ApiModelProperty(value = "生日", required = true, example = "日期")
    private Date birth;
    @ApiModelProperty(value = "使用者狀態", required = true, example = "0", allowableValues = "0,2")
    private UserStatusEnum status;
    @ApiModelProperty(value = "使用者狀態", required = false, example = "true", allowableValues = "true|false")
    private boolean testFlag2;


    @ApiModelProperty(value = "使用者狀態", hidden = true)
    private int flag = 0;

    public int getId() {
        return id;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", birth=" + birth
                + ", status=" + status + "]";
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @JsonSerialize(using = JsonDateSerializer.class)
    public Date getBirth() {
        return birth;
    }

    @JsonDeserialize(using = JsonDateDeserializer.class)
    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public UserStatusEnum getStatus() {
        return status;
    }

    public void setStatus(UserStatusEnum status) {
        this.status = status;
    }

    public int getFlag() {
        return flag;
    }

    public void setFlag(int flag) {
        this.flag = flag;
    }

    public boolean isTestFlag2() {
        return testFlag2;
    }

    public void setTestFlag2(boolean testFlag2) {
        this.testFlag2 = testFlag2;
    }
}


5、通過以上配置啟動專案在瀏覽器中訪問下面地址

localhost:8080/swagger-ui.html

裡面的詳細描述如下

參考:

本文已同步更新到公眾號,溝通交流請關注公眾號。

相關推薦

SpringMvc 3分鐘整合swagger2

swagger:restful管理專案API工具 1、引入最新版本的swagger依賴,低版本的有一些bug。如hidden註解的欄位不生效 <!-- swagger-mvc --> <dependency>

Android 3分鐘整合微信支付

一.長話短說,微信支付和支付寶支付一樣,分為三部曲。 a.向伺服器傳送請求,伺服器返回訂單資訊 b.呼叫微信請求發起支付 c.處理回撥結果 (在WXPayEntryActivity的onResp方法中,詳見如下步驟3) 二.直接上步驟:1.依賴://微信支付 c

Android 3分鐘整合支付寶支付

一.話不多說,直接上步驟。image.png2.在app的.gradle檔案中引入此jar包//支付寶支付 compile files('libs/alipaySdk-20170922.jar') 3.清單檔案 即AndroidManifest.xml檔案中宣告支付所需的ac

Android 3分鐘整合右滑退出

一.轟隆一聲靂響,小編閃亮登場    本文已同步更新至 簡書https://www.jianshu.com/p/c50aee649af2。例項.gif二.本篇採用第三方控制元件swipebacklayout,整合步驟如下:1.依賴 compile 'me.imid.swipe

【java框架】SpringBoot(3) -- SpringBoot整合Swagger2

1.SpringBoot web專案整合Swagger2 1.1.認識Swagger2 Swagger 是一個規範和完整的框架,用於生成、描述、呼叫和視覺化 RESTful 風格的 Web 服務。總體目標是使客戶端和介面文件系統作為伺服器以同樣的速度來更新。文件的介面方法,引數和模型緊密整合到伺服器端的程式

SpringBoot整合Swagger2,3分鐘輕鬆入手!

### 一、引入maven ```xml io.springfox springfox-swagger2 2.9.2 io.springfox

5分鐘 springboot 整合swagger2

sed des resources text def mutable rod contact println springboot 整合swagger2 1.maven配置文件中添加依賴 <properties> <swagger2.version

3分鐘學會activiti專案整合

整合步驟:      1.匯入activiti jar包 activiti-5.16.4\wars\activiti-rest\WEB-INF\lib\activiti*.jar mybatis-3.2.5.jar (儘量使用高版本) joda

SpringMVC+Spring+Mybatis整合應用(3

1. 實現圖片上傳 需求:在使用者註冊頁面實現上傳圖片作為使用者頭像     1. springmvc中對多部件型別請求資料解析:在頁面form中提交enctype="multipart/form-data"的資料時,需要springmvc對multipart型別的資料進行

Spring boot整合Swagger2頁面 不顯示的3個常見原因

第一種原因 我遇到兩次 如下圖;解決方法    1:<dependency>            <groupId>io.springfox</groupId>            <artifactId>springfox

Spring SpringMvc 3.0 + MyBatis 整合--補充關於.properties檔案的讀取

上篇文章中關於.propertis檔案的每條記錄在xml檔案裡面配置,如下圖 新方法: 專案啟動時候自動掃描.propertis裡面的每條內容到map中. 配置檔案: <bean id

SpringMVC RESTful風格CURD並整合Swagger2

RESTful風格的URL,每個網址代表一種資源,其顯著的特徵就是對於資源的具體操作型別,由HTTP動詞表示。SpringMVC 本身是支援 PUT,DELETE 等 HTTP 請求方式的,但由於某些客戶端(如:瀏覽器)並不支援這些,所以 spring 提供了H

SpringMVC整合Swagger2,初嘗試和遇到的相關問題

本文章更新頁請至:http://blog.csdn.net/MikeLC7/article/details/75088123 之前專案的介面文件都是手動編寫Word文件來做,製作成本較高,並且在進行版本迭代的時候進行標註和說明不是很方便,後來發現Swagger之後進行了簡

Spring SpringMvc 3.0 + MyBatis 整合

一、使用的jar包就不詳細講解了,下載了Mybatis 和 Spring 的jar包基本上都新增上去了、 一圖概括:(這是我使用的ar包,有些不是Mybatis 和 Spring 的 ) 二、 web.xml配置檔案 <?xml version="1.0" en

SpringMVC整合Swagger2

1 建立基本SpringMVC工程 1.1 建立SpringMVC Maven工程 web.xml <servlet> <servlet-name>spring</servlet-name>

3分鐘瞭解清楚持續整合、持續交付、持續部署

近些年來,持續整合、持續交付以及持續部署這幾個熱詞總是在大家的眼前晃來晃去!在招聘資訊和麵試過程中也會經常提及!在這裡我就用三分鐘時間來帶大家瞭解他們!   1. 持續整合(CI:Continuous Integration) 持續整合強調開發人員提交了新程式碼之後,立刻進行構建然後進行單元測試。根

springmvc和json整合配置方法

repl bin blank converter htm spring配置 tpm port 三方 配置方法一 1、導入第三方的jackson包,jackson-mapper-asl-1.9.7.jar和jackson-core-asl-1.9.7.jar。 2、spri

多工程:基於Maven的SSM(Spring,SpringMvc,Mybatis)整合的web工程(中)

png 開始 版本 war mage ont 右鍵 調用 web工程 上篇用了單工程創建了SSM整合的web工程(http://www.cnblogs.com/yuanjava/p/6748956.html),這次我們把上篇的單工程改造成為多模塊工程 一:創建

3分鐘帶你了解PowerShell發展歷程——PowerShell各版本資料整理

msdn 發展 mona ack html 工作 lease int -1 本文帶你了解PowerShell發展歷程,順便整理了一點資料,方便大家查詢。 Windows PowerShell? 是基於任務的命令行管理程序和腳本語言,專為進行系統管理而設計。 在 .NET F

SpringMvc和Mybatis整合總結

web images bean 技術 數據庫 tro control 自己 alt 1.先配置mybatis,測試讀取數據庫 2.自己測試數據 3.配置spring和springmvc, PS:配置web.xml,這樣就不用getBean了 4.配置Controlle