本章通過完成Spring Boot基礎項目的構建並實現一個簡單的Http請求處理,讓大家對Spring Boot有一個初步的了解,並體驗其結構簡單、開發快速的特性。預計閱讀及演練過程將花費約5分鍾。
使用Maven構建項目
- 通過
SPRING INITIALIZR工具生成基礎項目- 訪問:
http://start.spring.io/ - 填寫group(例如com.v5ent),選擇構建工具
Maven Project、Spring Boot版本以及一些工程基本信息,可參考下圖
- 點擊
Generate Project下載項目壓縮包
- 訪問:
- 解壓項目包,以
Maven項目形式導入到IDE中
項目結構解析
通過上面步驟完成了基礎項目結構的創建,Spring Boot的基礎結構共三個文件:
src/main/java下的程序入口:DemoApplicationsrc/main/resources下的配置文件:application.propertiessrc/test/下的測試入口:DemoApplicationTests
生成的DemoApplication和DemoApplicationTests類都可以直接運行來啟動當前創建的項目,由於目前該項目未配合任何數據訪問或Web模塊,程序會在加載完Spring之后結束運行。
引入Web模塊
當前的pom文件已經引入了兩個模塊:
spring-boot-starter:核心模塊,包括自動配置支持、日志和YAMLspring-boot-starter-test:測試模塊,包括JUnit、Hamcrest、Mockito
我們需添加spring-boot-starter-web模塊:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
編寫HelloWorld服務
- 創建
package命名為com.v5ent.demo.web - 創建
HelloController類,內容如下
@RestController public class HelloController { @RequestMapping("/hello") public String index() { return "Hello World"; } }
- 啟動主程序,打開瀏覽器訪問
http://localhost:8080/hello,可以看到頁面輸出Hello World
編寫單元測試用例
打開src/test/下的測試入口DemoApplicationTests類。下面編寫一個簡單的單元測試來模擬http請求,具體如下:
@RunWith(SpringRunner.class) @SpringBootTest public class DemoApplicationTests { private MockMvc mvc; @Before public void setUp() throws Exception { mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build(); } @Test public void getHello() throws Exception { mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().string(equalTo("Hello World"))); } }
使用MockServletContext來構建一個空的WebApplicationContext,這樣我們創建的HelloController就可以在@Before函數中創建並傳遞到MockMvcBuilders.standaloneSetup()函數中。
注意引入下面內容:
import static org.hamcrest.Matchers.equalTo; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
Ok,跑起來,完全和預想的一樣。至此已完成本章目標,通過Maven構建了一個空白Spring Boot項目,再通過引入web模塊實現了一個簡單的請求處理。
如此快速、開箱即用,爽到飛起。
