構建 Maven 項目
-
通過官方的 Spring Initializr 工具來產生基礎項目,訪問 http://start.spring.io/ ,如下圖所示,該頁面提供了以Maven構建Spring Boot 項目的功能。
- 選擇構建工具 Maven Project,Spring Boot 版本選擇 1.5.4,填寫 Group 和 Artifact 信息,在Search for dependencies 中可以搜索需要的其他依賴包,這里我們需要實現 RESTful API,所以可以添加 Web 依賴。
- 點擊 Generate Project 按鈕下載項目的壓縮包,並且解壓項目包
- 使用 IDE 導入項目,以 Intellij IDEA 14 為例,從菜單中選擇 File->New->Project from Existing Sources…,選擇解壓的項目文件夾 的 POM.xml 文件,並點擊 OK 按鈕,一直點擊 Next ,這樣我們就創建了一個最基礎的Spring Boot 工程
工程結構解析
如上圖所示,Spring Boot 的基礎結構有三大塊(具體路徑根據用戶生成項目時填寫的Group和Artifact有所差異)
- src/main/java:主程序入口 SpringbootDemoApplication,可以通過直接運行該類來啟動 Spring Boot應用
- src/main/resources:配置目錄,該目錄用來存放應用的一些配置信息,比如應用名、服務端口、數據庫配置等。由於我們應用了Web模塊,因此產生了 static目錄與templates目錄,前者用於存放靜態資源,如圖片、CSS、JavaScript等;后者用於存放Web頁面的模板文件。
- src/test:單元測試目錄,生成的 SpringbootDemoApplicationTests 通過 JUnit4實現,可以直接用運行 Spring Boot應用的測試。
Maven配置分析
打開當前工程下的 pom.xml 文件,可以看到如下關鍵配置:
- 設置當前項目的父項目,配置如下
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
- 設置項目源碼文件的編碼和JDK版本,配置如下
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
- 設置項目依賴,spring-boot-starter-web 項目為全棧Web開發模塊,包含嵌入式 Tomcat、Spring MVC;spring-boot-starter-test項目為通用測試模塊,包含 JUnit、Hamcrest、Mockito 配置如下
<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>
實現 RESTful API
在Spring Boot 中創建一個RESTFul API 的實現代碼同 Spring MVC一樣,只是不需要Spring MVC那樣先做很多配置,步驟如下:
-
新建 HelloController 類,代碼如下:
@RestController
public class HelloController {
@RequestMapping ("/hello")
public String index() {
return "Hello World";
}
}
- 啟動應用,通過 http://localhost:8080/hello ,我們可以看到返回了預期的結果:Hello World
啟動 Spring Boot 應用
啟動 Spring Boot 應用的方式很多種:
- 作為一個Java應用程序,可以直接通過運行擁有的main函數的類來啟動
- 在服務器上部署運行時,通常先使用 mvn install 將應用打包成 jar包,再通過 java -jar xxx.jar 來啟動應用
編寫單元測試
在Spring Boot 中實現單元測試很方便,我們打開 src/test 下的單元測試入口 SpringbootDemoApplicationTests 類,編寫一個簡單的單元測試來模擬 HTTP 請求,測試代碼如下:
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith (SpringRunner.class)
@SpringBootTest
public class SpringbootDemoApplicationTests {
private MockMvc mvc;
@Before
public void setUp() {
mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
}
@Test
public void helloTest() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON_UTF8))
.andExpect(status().isOk())
.andExpect(content().string("Hello World"));
}
}
代碼解析如下:
- @RunWith (SpringRunner.class):引入Spring 對JUnit4的支持
- MockMvc 對象:用於模擬調用 Controller 的接口發起請求,在 helloTest 測試用例方法中,perform 函數執行一次請求調用,accept 用於執行接收的數據類型,andExpect 用於判斷接口返回的期望值
- @Before:JUnit中定義在測試用例 @Test 內容執行前預加載的內容,這里用於初始化 MockMvc 實例