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-swagger2 和springfox-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.xml,spring-servlet.xml,applicationContext.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&