1. 程式人生 > >springBoot的快速入門

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 Bootweb打成的是一個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用於判斷介面的期望值。