SpringBoot入門最詳細教程

https://www.jianshu.com/p/af3d5800f763

網上有很多springboot的入門教程,自己也因為項目要使用springboot,所以利用業余時間自學了下springboot和springcloud,使用下來發現springboot還是挺簡單的,體現了極簡的編程風格,大部分通用都是通過注解就可以完成,下面就來詳細講解下如何使用springboot來開發一個簡單的restful api網關功能,可以提供給H5或者android、ios進行接口開發,還是很方便的。

1. 使用spring initialization創建SpringBoot項目

有很多方法可以快速創建Springboot項目,可以通過idea的springboot initialization來創建,也可以通過手工新建一個maven工程,然后引入springboot的dependency來完成sprignboot的工程導入,還可以通過spring官網的來創建springboot項目,因為有些同學可能沒裝idea,這里就通過官網的工程初始化指引來創建一個springboot空工程。
首先輸入網址 https://start.spring.io,打開后可以看到下圖:

image

在serch for dependency輸入web,即可完成基本的restful接口網關的功能,如果要JPA或者oauth安全相關的組件,可以增加rest repository、spring security等相關組件依賴庫,spring提供的配套組件還是很多的,基本涵蓋了所有應用場合。
加入web組件后,點擊下方的綠色按鈕Generate Project即可創建一個springboot工程,并且自動下載到本地,接下來直接在idea或者eclipse打開該工程就可以了,在創建的時候可以選擇Maven工程或者Gradle工程,這里我們使用了大家比較熟悉的Maven工程。

?

2. 工程結構

解壓項目包,并用IDE以Maven項目導入,以IntelliJ IDEA 14為例:

1)菜單中選擇File–>New–>Project from Existing Sources...

2)選擇解壓后的項目文件夾,點擊OK

3)點擊Import project from external model并選擇Maven,點擊Next到底為止。

4)若你的環境有多個版本的JDK,注意到選擇Java SDK的時候請選擇Java 7以上的版本

下面我們在ide中打開工程,這里使用的ide是idea,工程的目錄結構為:

創建controller的package: 右鍵aplication所在的包,new->package->controller
image

可以看到工程中有maven的pom文件,也自動創建了SpringbootStartApplication.java該類為springboot的啟動類,待會兒我們一起看下這個類,先看下maven的pom文件有哪些。這里主要是依賴了springboot的1.4.7版本,目前最新已經更新到1.5.6了,這里沒有用最新版本,還是不當小白鼠了,在dependency中依賴了spring-boot-starter-web還有個test測試的組件,如果不寫測試代碼,可以不使用該test組件,最后還加入了支持springboot的maven plugin組件。

?

    <parent><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 

剛看完了pom文件,在導入工程的時候,ide一般會自動導入依賴庫,在國內訪問maven的依賴庫速度感人,建議使用阿里云的maven鏡像服務器,或者使用公司的maven私服,如果公司沒有私服或者自己學習可以直接使用阿里云的鏡像速度還是不錯的,maven setting.xml中需要添加mirror地址,具體如何配置這里就不詳細描述了,可以自行百度,這里也順便附上阿里云maven地址:

<mirror><id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>


pom中需加入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

配置好了pom后,我們一起看下自動生成的Application.java這個類相當于我們程序的main函數入口,這里再順便介紹下因為springboot集成了Tomcat和Jetty,默認使用Tomcat作為應用容器,開發者只需要將工程打成jar包直接丟到服務器上就可以執行了,不需要再單獨部署到was、jboss、tomcat這些應用服務器上。
SpringBootStartApplication.java

@SpringBootApplication
public class SpringbootStartApplication { public static void main(String[] args) { SpringApplication.run(SpringbootStartApplication.class, args); } } 

所有的springboot application啟動類都需要在類級別上加上@SpringBootApplication注解,其他參數不用任何調整,后續可以把一些初始化的動作放到該類中進行,目前本例中就不加其他的啟動加載項了。
這樣一個api網關的架子就搭好了,是不是很簡單!下面我們就可以將主要精力聚焦在業務邏輯代碼上了,這里為了簡化程序,不會將項目進行深入的分層設計,在實際項目中,一般都會對項目進行分層設計,如果是api網關,沒有view層但是起碼也會有對外接入decontroller層、處理業務邏輯的service層、處理數據持久化的dao層,同時也會有一些POJO業務實體類,這里就不詳細展開了,后續也會對互聯網架構設計進行詳細講述,這里我們只創建了一個UserController類,里面只有獲取用戶信息的方法,分別根據參數和請求方式的不同用三種方法進行了重寫,下面就來一一道來。

先來講述下最簡單的使用get請求用戶信息的實現方式,代碼如下,寫好后直接在Application類點擊右鍵有個RunAs,點擊后會自動運行,運行成功后可以使用http發包工具進行測試,這里推薦使用chrome的postman或者使用firefox的httprequester插件,都是比較簡單的發包工具,get請求的上送為http://localhost:8081/springboot/getUserByGet?userName=feiweiwei

//@RestController注解能夠使項目支持Rest
@RestController
@SpringBootApplication
//表示該controller類下所有的方法都公用的一級上下文根 @RequestMapping(value = "/springboot") public class UserController { //這里使用@RequestMapping注解表示該方法對應的二級上下文路徑 @RequestMapping(value = "/getUserByGet", method = RequestMethod.GET) String getUserByGet(@RequestParam(value = "userName") String userName){ return "Hello " + userName; } }

無法識別的類,通過ctrl+enter進行import

這里用到的注解主要有@RequestMapping表示請求的URL上下文路徑,該路徑不能重復,為了保證與團隊其他同事寫的不重復,一般會在每個controller前面加一個一級上下文目錄,具體路徑參數放在value后面,在每個方法前加一個二級目錄,這樣可以有效的避免路徑沖突。還有注解是@RequestParam,該注解可以通過value指定入參,這里return的返回值就是實際的接口返回。

下面介紹下POST的請求方式,可以通過在@RequestMapping注解中設置method為POST來表示該請求為POST請求,除了get、post還有put、delete等請求方式,都可以通過該參數設置。

//通過RequestMethod.POST表示請求需要時POST方式@RequestMapping(value = "/getUserByPost", method = RequestMethod.POST)String getUserByPost(@RequestParam(value = "userName") String userName){ return "Hello " + userName; } 

下面介紹下請求參數為JSON格式的請求方法的寫法,這里需要注意下如果請求參數是像上面那樣通過url form形式提交的請求參數,那么必須使用@RequestParam注解來標示參數,如果使用的請求報文是POST形勢的JSON串,那么這里在入參的注解一定要使用@RequestBody,否則會報json解析錯誤。

//在入參設置@RequestBody注解表示接收整個報文體,這里主要用在接收整個POST請求中的json報文體,//目前主流的請求報文也都是JSON格式了,使用該注解就能夠獲取整個JSON報文體作為入參,使用JSON解析工具解析后獲取具體參數@RequestMapping(value = "/getUserByJson",method = RequestMethod.POST) String getUserByJson(@RequestBody String data){ return "Json is " + data; } 

3. 小結

到此一個簡單的restful風格的api網關就完成了,對于移動開發人員可以自己寫簡單的服務端進行全棧開發了,原來做spring的同學也可以很快上手springboot,springboot總體上來說還是簡化了原先復雜的配置,讓大家更容易快速上手和搭建服務端,代碼的git地址在下方,歡迎大家下載,謝謝。

git代碼地址:https://github.com/feiweiwei/springboot-start.git



作者:monkey01
鏈接:https://www.jianshu.com/p/af3d5800f763
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。

轉載于:https://www.cnblogs.com/DjangoBlog/p/9523021.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247451.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247451.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247451.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通過Vue CLI3 快速創建Vue項目并部署到tomcat

1、前提 首先你要安裝好nodejs和yarn,直接在官網下載安裝包&#xff0c;一鍵安裝即可&#xff0c;不需要什么環境配置&#xff0c;我安裝的是最新版本&#xff08;node-v10.13.0、yarn-1.12.3&#xff09; 2、安裝 同時寫Vue CLI 3和Vue CLI 2 的原因是官方默認的是3&#x…

簡述區塊鏈(1)- 也許只有這一篇

一、嘮叨兩句 最近一直在考慮一個事情&#xff0c;就是怎么給不太了解技術的人講清楚區塊鏈。我先試著寫下來&#xff0c;然后在逐步打磨吧&#xff0c;目標就是讓哪些說看區塊鏈看的云里霧里的同學能對區塊鏈有一些認知。 二、定義 簡單的給區塊鏈下個定義&#xff1a;基于加密…

Vue CLI 3.0腳手架如何在本地配置mock數據json

前后端分離的開發模式已經是目前前端的主流模式&#xff0c;至于為什么會前后端分離的開發我們就不做過多的闡述&#xff0c;既然是前后端分離的模式開發肯定是離不開前端的數據模擬階段。 我們在開發的過程中&#xff0c;由于后臺接口的沒有完成或者沒有穩定之前我們都是采用…

python 通過下載包setup.py安裝模塊

下載安裝包&#xff0c;并解壓到相應的位置 1、打開cmd 2、到達安裝目錄 3、python setup.py build 4、python setup.py install 轉載于:https://www.cnblogs.com/liuchunxiao83/p/11207340.html

webpack之externals操作三部曲--正確的姿勢

1.作用 首先webpack提供這個externals選項作用是從打包的bundle文件中排除依賴。換句話說就是讓在項目中通過import引入的依賴在打包的時候不會打包到bundle包中去&#xff0c;而是通過script的方式去訪問這些依賴。 2.怎么用&#xff1f; 以jquery為例子&#xff0c;目的是在…

Anaconda3自帶jupyter

1、cmd命令行中輸入 JupyterNotebook 2、系統自動調起下面頁面&#xff08;注冊端口沖突是打不開的&#xff09; 轉載于:https://www.cnblogs.com/liuchunxiao83/p/11207385.html

python 的按位與 或 異或 運算

符號 描述 運算規則 by MoreWindows & 與 兩個位都為1時&#xff0c;結果才為1 &#xff08;統計奇數&#xff09; | 或 兩個位都為0時&#xff0c;結果才為0 &#xff08;統計偶數&#xff09; ^ 異或 兩…

理解Shadow DOM

1. 什么是Shadow DOM? Shadow DOM 如果按照英文翻譯的話可以理解為 影子DOM, 何為影子DOM呢&#xff1f;可以理解為一般情況下使用肉眼看不到的DOM結構&#xff0c;那如果一般情況下看不到的話&#xff0c;那也就是說我們無法直接控制操縱的DOM結構。 Shadow DOM 它是HTML的一…

046 實例11-自動軌跡繪制

目錄 一、"自動軌跡繪制"問題分析1.1 問題分析1.2 自動軌跡繪制二、"自動軌跡繪制"實例講解2.1 自動軌跡繪制2.2 數據接口定義2.3 數據文件三、"自動軌跡繪制"舉一反三3.1 理解方法思維3.2 應用問題的擴展一、"自動軌跡繪制"問題分析 …

bootstrap-select采坑

bootstrap-select采坑 1.class"selectpicker" 普通的下拉框功能 2.title"請選擇城市名稱" title的作用與palcehoder一樣。 3.select class"selectpicker" multiple selectpicker和multiple屬性的搭配使用可實現多選 4.data-live-search"tru…

對vue虛擬dom的研究

Vue.js通過編譯將template 模板轉換成渲染函數(render ) &#xff0c;執行渲染函數就可以得到一個虛擬節點樹在對 Model 進行操作的時候&#xff0c;會觸發對應 Dep 中的 Watcher 對象。Watcher 對象會調用對應的 update 來修改視圖。這個過程主要是將新舊虛擬節點進行差異對比…

element-ui之dialog組件title插槽的使用

dialog對話框組件title屬性的slot使用方法 使用背景 需要單獨控制title中某個數據顯示及樣式&#xff0c;footer也一樣 <el-dialog// 也可以這樣寫,但是沒有辦法單獨控制name age的顯示// title"name age"title"提示":visible.sync"dialogVisi…

css3自適應布局單位vw,vh

視口單位(Viewport units) 什么是視口&#xff1f; 在桌面端&#xff0c;視口指的是在桌面端&#xff0c;指的是瀏覽器的可視區域&#xff1b;而在移動端&#xff0c;它涉及3個視口&#xff1a;Layout Viewport&#xff08;布局視口&#xff09;&#xff0c;Visual Viewport…

python 操作 elasticsearch-7.0.2 遇到的問題

錯誤一&#xff1a;TypeError: search() got an unexpected keyword argument doc_type&#xff0c;得到不預期外的參數 解決方法&#xff1a;elasticsearch7里不用文檔類型&#xff0c;所以去掉 doc_typecredit_data 錯誤二&#xff1a;RequestError(400, illegal_argument_ex…

用到的Shell

sed 1i 添加的內容 file #這是在第一行前添加字符串 sed $i 添加的內容 file #這是在最后一行行前添加字符串 sed $a添加的內容 file #這是在最后一行行后添加字符串 sed -i s/.*/行首添加內容&行尾添加內容/ 文件名 //每一行 sed -i $a新增的一行 tars_build_tar.sh a…

如何解決瀏覽器縮小出現橫向滾動條時網頁背景圖出現空白的問題

原因&#xff1a; 當窗口縮小時&#xff0c;瀏覽器默認100%寬度為瀏覽器窗口的寬度。而忽略了下部內容層固定寬度(1024px)。從而出現了固定寬度大于100%寬度的現象。瀏覽以此理解來解析頁面&#xff0c;就出現了容器寬度理解上的差異&#xff0c;出現了一個非常奇特的BUG。 解…

前端設計模式

1. 單例模式 2.裝飾器模式 轉載于:https://www.cnblogs.com/lyraLee/p/11210985.html

區別 (function($){...})(jQuery)、$(function(){ })和$.fn

一、(function($){…})(jQuery) 首先function(arg){...}定義了一個匿名函數&#xff0c;參數為arg,而調用時需要在函數后面寫上括號和實參&#xff0c;由于操作符的優先級&#xff0c;函數本身也需要括號&#xff0c;也就成了&#xff1a; &#xff08;function(arg){...}&…

git 清除緩存

清除git緩存 git config --local --unset credential.helpergit config --global --unset credential.helpergit config --system --unset credential.helper保存git緩存 git config --global credential.helper store轉載于:https://www.cnblogs.com/zhouyideboke/p/11211650.…

網頁里如何使用js禁用控制臺

網頁里如何禁用右擊事件&#xff1f;使用jQuery&#xff0c;幾句代碼就可以搞定了 document.oncontextmenu function(){return false;} 簡單示例&#xff1a; js實現&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><…