1. 程式人生 > >spring mvc 整合 swagger 詳細實踐,絕壁原創,耳目一新的感覺。

spring mvc 整合 swagger 詳細實踐,絕壁原創,耳目一新的感覺。

一般都是在已經很完善的專案裡面,去整合這個 swagger ,我這就反其道而行之,仔細看看這個 swagger 到底都依賴些什麼jar包。
讓你好好了解下這個東西,出了些問題的話,也可以簡單的處理下。
我這就是以一個非常簡單的 maven hello world 專案的基礎上,去整合這個 swagger 的實踐記錄。
所以,你這得有個如上的簡單專案。
我這有以前的連結,可以供小白們參考。

先是建立個簡單的hello world 的 maven web專案,參見下面的連結。

然後就是在上面的簡單專案裡面加上spring mvc 相關的東西。參見下面的連結。

上面的2個連結都仔細實踐過之後,準備工作就OK啦

開始,怎麼整合這個 swagger 

先是pom.xml的 dependency 依賴的新增。

為了一覽全貌,我就把全部的依賴放這了,因為是個超簡單的專案,所以這個依賴很少,方便觀眾,看清楚,每個依賴都是幹啥的。

    <dependencies>
        <!-- Spring MVC support -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>
        <!--JSTL-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <scope>runtime</scope>
        </dependency>
        <!-- swagger2 核心依賴 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
        </dependency>
        <!-- swagger-ui 為專案提供api展示及測試的介面 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
        </dependency>
        <!-- 整合 swagger 的時候,缺少這個 jar包是不OK的-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.2.3</version>
        </dependency>

    </dependencies>

我看有的老鐵的文章裡面,信誓旦旦的說,老簡單啦,就需要特別引入 springfox-swagger2springfox-swagger-ui  2個jar依賴,就是前面的兩個,沒有我這個地方的第三個。

也許他不是,從一個完全乾淨的專案開始整的,搞不好,他的那個專案裡面已經有了我上面提供的第三個的依賴。

如果,你覺得溼胸我說的有問題,可以實驗一把,把我後面的那個依賴刪除了,測試一下。就會發現,index頁面跑起來沒問題,但是訪問咱自己寫的controller的時候,就炸啦。我這有如下的報錯圖,供各位參考。

可以看到是少了個這,

然後再給各位觀眾看看,當新增上剛剛的三個依賴後,整個專案的各個jar包的依賴關係圖

注意啦,有些老鐵嫌棄溼胸的這個圖上面的字太小啦,唉,這能怪我嗎。。。

你可以,按我下圖操作,在新標籤頁,開啟這個圖,估計可以看到大圖啦。

這下就可以看到整個spring mvc 專案裡面的各個jar包的依賴關係啦。

要是還嫌棄小,老鐵,你down下來,不就可以放大看了嗎?

是不是有耳目一新的感覺,估計以前誰的文章,都沒這麼直觀的告訴你,一個專案的jar包之間的依賴關係是這麼來的吧。

想知道上面的這個依賴關係圖怎麼來的嗎?

需要新增一句

<mvc:default-servlet-handler />

為了明瞭的展示問題,我這就把我的全部貼出來。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- 開啟spring的掃描注入,使用如下註解 -->
    <!-- @Component,@Repository,@Service,@Controller-->
    <context:component-scan base-package="com.lxk"/>

    <!-- 開啟springMVC的註解驅動,使得url可以對映到對應的controller -->
    <mvc:annotation-driven />
    <mvc:default-servlet-handler />
    <!-- 檢視解析 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>
裡面就是spring mvc 專案相關的一些配置,外加這個外掛需要的一個配置。

有些老鐵說,要是專案配置了攔截器,需要新增如下的一些配置,

            <mvc:exclude-mapping path="/swagger*/**"/>
            <mvc:exclude-mapping path="/v2/**"/>
            <mvc:exclude-mapping path="/webjars/**"/>
但是我這配置了攔截器,但是,不配置這個,頁面也是OK的,所以,這個估計得看個人情況啦。


我註釋掉,頁面照樣可以OK。

最後,就是Java程式碼的實際操作啦。分2部分,一個是Java不分的配置,一個是實際你需要完善的 那些個資訊。

package com.lxk.utils;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import springfox.documentation.builders.ApiInfoBuilder;
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;

/**
 * @author lxk on 2017/12/18
 */
@Configuration
@EnableSwagger2
@EnableWebMvc
public class ApiConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .build()
                .apiInfo(apiInfo());
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("大師兄整合swagger的介面測試")
                .description("聞道有先後,術業有專攻。")
                .termsOfServiceUrl("http://blog.csdn.net/qq_27093465?viewmode=contents")
                .contact(new Contact("csdn大師兄", "http://blog.csdn.net/qq_27093465", "[email protected]"))
                .license("")
                .licenseUrl("")
                .version("1.0.0")
                .build();
    }

}
這裡面的各個描述和最後的頁面的對應關係,一會看執行結果圖就知道啦。

最最後,就是在controller裡面的請求上使用註解,完善最後的結果圖。

package com.lxk.controller;

import com.lxk.model.Student;
import com.lxk.service.StudentService;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.stereotype.Controller;
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.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;

/**
 * Created by lxk on 2017/3/27
 */
@Controller
@RequestMapping("student")
public class StudentController {

    @Resource(name = "studentService")
    private StudentService studentService;

    //@ResponseBody//(之前我因為加了這個註解,導致頁面訪問一直是406錯誤,註釋了就好啦,具體為啥我暫時還不知道)
    @ApiOperation(value = "獲得所有的學生物件list", notes = "get請求,查詢所有的學生。")
    @RequestMapping(value = "/getAllStudent", method = RequestMethod.GET)
    public ModelAndView getAllStudent() {
        ModelAndView mav = new ModelAndView();
        mav.setViewName("studentDisplay");
        mav.addObject("students", studentService.getAllStudent());
        return mav;
    }

    @ApiOperation(value = "根據學生的name,獲得單個學生的資訊", notes = "根據學生的name,查詢學生物件的資訊。")
    @ApiImplicitParam(name = "name", value = "學生的名稱", required = true, dataType = "String")
    @ResponseBody
    @RequestMapping(value = "getStudentByName", method = RequestMethod.POST)
    public String getStudentByName(String name) {
        return "";
    }

    @ApiOperation(value = "根據學生的name和age,獲得單個學生的資訊", notes = "根據學生的name和age,查詢學生物件的資訊。")
    @ApiImplicitParams({@ApiImplicitParam(name = "name", value = "學生名稱", required = true, dataType = "String"),
            @ApiImplicitParam(name = "age", value = "學生年齡", required = true, dataType = "int")})
    @ResponseBody
    @RequestMapping(value = "getStudentByNameAndAge", method = RequestMethod.POST)
    public String getStudentByName(String name, int age) {
        return "";
    }

    @ApiOperation(value = "新建學生物件到資料庫", notes = "新建資料到資料庫。")
    @ApiImplicitParam(name = "student", value = "學生物件", required = true, dataType = "Student")
    @ResponseBody
    @RequestMapping(value = "createNewStudent", method = RequestMethod.POST)
    public String create(@RequestBody Student student) {
        return "";
    }
}
一切OK,之後,配置好tomcat,然後啟動伺服器,然後,跳轉到index頁面,然後,就開啟頁面的連結;

http://localhost:8080/lxk/swagger-ui.html#/

這地方的lxk,是我配置tomcat的時候給配置上去的,各位因地制宜哦。

然後就是執行結果圖。


這就是最終的執行結果。

圖上的箭頭,就是剛剛在Java程式碼裡面2個地方寫的資訊。

還有啊,這幾個請求是可以點開的,裡面還有詳情呢。老鐵們實踐的時候,可以點開看看。我就不截圖啦。

至此,這個整合的實踐,就算完啦。

說下感想:

這個東西,也不是很好呀,只是說,作為開發者,你省卻了去寫開發文件的時間,但是這個頁面出來之後,並不是很好用。而且,你在controller裡面加的那些個註解,以及註解上使用的引數,也就是你寫的那些個描述資訊,這都是和程式碼的邏輯沒什麼關係的,用高階點的術語,就是這個非常的入侵,非常的不友好。我們這也是說領導要讓我們開發寫開發文件,有什麼請求,請求的引數,都返回什麼,都是幹啥的,都是什麼請求方式等等這些資訊。因為這個文件的書寫和維護很麻煩的,所以,打算使用這個 swagger 外掛來簡化這個 工作。但是,我覺得這東西並不好啊。非常不好。我個人是這麼覺得的。

我寫完文章,給自己點個贊,不過分吧,

不過分,那我可就點啦啊。

我先點為敬,你們隨意。大家隨意。不要客氣。。。

想要原始碼嗎?

不免費送啦,你懂的。

相關推薦

spring mvc 整合 swagger 詳細實踐絕壁原創耳目一新感覺

一般都是在已經很完善的專案裡面,去整合這個 swagger ,我這就反其道而行之,仔細看看這個 swagger 到底都依賴些什麼jar包。 讓你好好了解下這個東西,出了些問題的話,也可以簡單的處理下。 我這就是以一個非常簡單的 maven hello world 專案的基礎

Spring MVC學習總結(13)——Spring MVC整合Swagger時文件無法排序問題

新增排序屬性: window.swaggerUi = new SwaggerUi({      ...      apisSorter: "alpha", // can also be a funct

spring boot整合swagger自定義註解攔截器xss過濾非同步呼叫定時任務案例

本文介紹spring boot整合swagger,自定義註解,攔截器,xss過濾,非同步呼叫,定時任務案例 整合swagger--對於做前後端分離的專案,後端只需要提供介面訪問,swagger提供了介面呼叫測試和各種註釋的視覺化web介面。配置swagger的掃描包路徑,api資訊等,見配置類Swagger

Spring mvc整合Mybatis選擇性儲存物件欄位資料

前言 我們平時使用mybatis儲存物件資料時,經常可能只是修改其中某一倆個欄位的值,這個時候,我們為了減少資料庫更新帶來的效能、行鎖等不必要的消耗,可能會重新寫一個介面,只負責修改需要修改的值。 但是,隨著業務系統的變更,業務欄位的增加,越來越多的欄位需要

Spring Boot 整合 Swagger生成介面文件就這麼簡單!

開發十年,就只剩下這套架構體系了! >>>   

Spring MVC整合Velocity

java程序 界面設計 配置文件 web開發 engine Velocity模板(VM)語言介紹Velocity是一個基於java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。當Velo

spring mvc接收ajax提交的JSON數據並反序列化為對象

ucc clas resp 格式 字符 序列 設定 ati res 需求:spring mvc接收ajax提交的JSON數據,並反序列化為對象,代碼如下: 前臺JS代碼: //屬性要與帶轉化的對象屬性對應 var param={name:‘語文‘,price:16

spring boot整合swagger ui (RESTFUL接口的文檔在線自動生成+功能測試功能軟件,前後端分離快速開發)

oot images user builder img iop spi update and swagger ui可以通過來攔截controller層,生成請求API,並將其展示在瀏覽器當中。我們可以直接通過瀏覽器來查看和調試接口。 1 添加maven依賴

Spring MVC的WebMvcConfigurerAdapter用法收集(零配置無XML配置)

clas security net turn 信息 xxx jsonview frame ppi 原理先不了解,只記錄常用方法 用法: @EnableWebMvc 開啟MVC配置,相當於 <?xml version="1.0" encoding="UTF-

Spring MVC整合Velocity詳解

springmvcvelocity一、Velocity簡介Velocity是一個基於java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。當Velocity應用於web開發時,界面設計人員可以和java程序

Spring MVC整合fastjson、EasyUI亂碼問題

pri har value object 解決 pub return urn ast 一、框架版本 Spring MVC:spring-webmvc-4.0.0.RELEASE fastjson:fastjson-1.2.45 EasyUI:1.5 二、亂碼現象

IDEA建立Spring MVC Hello World 詳細入門教程

solver 也有 就是 內容 彈出 開頭 web-inf 我們 utf 引子,其實從.NET轉Java已經有幾個月時間了,項目也做了不少,但是很多配置都是根據公司模板或者網上教程比忽略畫瓢,對其中最簡單的配置和設置並不完全理解,依舊是小白用戶。最近項目不忙,重新梳理了一下

Spring boot整合Swagger

multipl required access esp das bject 參考 editor 是我 本文github位置:https://github.com/WillVi/springboot-swagger2-demo 環境準備 JDK版本:1.8 Spring b

Spring Boot 整合Swagger中的坑

目錄 一、訪問swagger-ui.hyml頁面出錯 1.1 情況1 1.2 情況2 二、無法載入swagger-ui.html頁面中的靜態資源 三、出現彈窗,無法訪問 四、總結 一、訪問swagger-ui.hyml頁面出錯 1.1 情況1

spring mvc記錄各個controller訪問開始結束時間以及耗時時間 執行緒安全

package cn.test.web.interceptor;   public class StopWatchHandlerInterceptor extends HandlerInterceptorAdapter&nbs

Spring boot 整合 swagger生成api文件(轉換成markdown格式)

spring boot 整合 swagger 步驟 1. 匯入jar包 2. 新增配置類 3. 新增介面類 3. 啟動伺服器 4. 訪問UI頁面,可線上測試介面 5. 匯出swagger原始檔 6. 轉換成markdown格式檔案 1,匯入jar包 gradl

spring mvc整合Quartz框架配置多定時任務

一、增加所依賴的JAR包     1、增加Spring的Maven依賴 <!--Quartz的Maven依賴 --> <dependency> <groupId>org.quartz-scheduler</group

Spring boot 整合Swagger的兩種方式

增加請求不被攔截 ,"/swagger-ui.html" ,"/swagger-resources/**" 方式1: <dependency> <groupId>io.springfox</groupId> &l

2.SpringMVC+Spring+Mybatis整合(2) 配置web.xmlspring-servlet.xmlapplicationContext.xml

web spring-servlet 在 webapp WEB-INF下 applicationContext 在resource資料夾下 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:

Spring Boot 整合 Swagger-UI

SpringBoot整合swagger ui。  三步就行。 1、pom.xml中新增依賴  <dependency> <groupId>io.springfox&