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";
}
}
通过 http://localhost:8080/hello 就可以看到hello word
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用于判断接口的期望值。