1. 程式人生 > >SpringBoot入門詳細教程【轉】

SpringBoot入門詳細教程【轉】

網上有很多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中開啟工程,這裡使用的ide是idea,工程的目錄結構為:


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後,我們一起看下自動生成的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;
    }
}
這裡用到的註解主要有@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地址在下方,歡迎大家下載,謝謝。