springBoot的快速入門
1)maven的配置分析
開啟當前工程下的pom.xml 檔案,看看生成專案的時候都引入那些依賴建立SpringBoot工程,內容如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.peter</groupId> <artifactId>spring_test</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring_test</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.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-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.29</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <profiles> <profile> <id>dev</id> <properties> <env>profiles/dev</env> <main-name></main-name> </properties> </profile> <profile> <id>pro</id> <properties> <env>profiles/pro</env> <main-name></main-name> </properties> </profile> <profile> <id>test</id> <properties> <env>profiles/test</env> <main-name></main-name> </properties> </profile> </profiles> </project>
我們注意到Spring Boot打的是jar包:<packaging>jar</packaging> 正如我們說的Spring Boot的web打成的是一個jar包,不是war包,因為預設的web的依賴就會內嵌tomcat,這樣就是我們使用jar包的時候就擁有web的服務能力。
父專案parent 配置指定為spring-boot-starter-parent 的2.0.1.RELEASE的版本,該父專案中定義了Spring Boot 版本的基礎依賴以及一些預設配置內容,比如配置檔案application.properties 的位置等。
在專案依賴dependencies 配置中,包含了下面兩項。
Spring-boot-starter-web ; spring-boot-starter-test
這裡所引用的web 和test模組,在spring Boot 生態中被稱為Starter POMS 。Starter POMS是一系列輕便的依賴包,是一套一站式的spring的相關的技術解決方案。
2)實現RESTful API
在Spring Boot 中建立一個RESTful API 的實現程式碼同Spring MVC 應用一樣,只是不需要像Spring MVC 那樣先做很多的配置,而是向下面這樣直接編寫Controller 內容:
新建 package ,命名為 com.peter.controller
新建HelloController 類 ,內容如下所示。
package com.peter.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* Created by Administrator on 2018/4/9.
*/
@RestController
@ResponseBody
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello world";
}
}
3)編寫單元測試
在Spring Boot 中實現單元測試同樣非常的方便,下面我們開啟src/test/下的測試入口 com.peter.SpringTestApplicationTests 類 ,編寫一個簡單的單元測試來模擬HTTP 請求,測試之前實現的/hello介面, 該介面返回hello word 字串。
具體程式碼實現如下所示:
package com.peter;
import com.peter.controller.HelloController;
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.context.web.WebAppConfiguration;
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.hamcrest.core.IsEqual.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class SpringTestApplicationTests {
private MockMvc mvc;
@Before
public void setUP(){
mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
}
@Test
public void hello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("hello world")));
}
}
程式碼解析如下:
@RunWith(SpringRunner.class) 引入Spring 對JUnit4的支援
@WebAppConfiguration 開啟Web 應用的配置,用於模擬ServletContext
@Before JUnit 中定義的測試用例@Test內容執行前預載入的內容,這裡用來初始化對HelloController的模擬
MockMvc 物件 :用於模擬呼叫Controller的介面發起請求,在@Test 定義的hello測試用例中,perform 函式執行一次請求呼叫 ,accept 用於執行接收的資料型別,andExpect用於判斷介面的期望值。