Spring Boot 对基础 Web 开发的支持

本文详细介绍了Spring Boot如何支持Web开发,特别是如何处理JSON数据和请求参数。通过示例展示了如何创建RESTful服务,使用@RestController注解简化JSON响应,以及如何通过@RequestMapping接收POST请求。此外,还讲解了限制请求类型的方法,并演示了通过URL参数传递数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先让大家快速认识Spring Boot 对基础Web开发所做的优化;接下来讲解了如何在SpringBoot中使用前端技术JSP、Thymeleaf,重点介绍了Thymeleaf的各种使用场景;后面几课介绍了如何使用Spring Boot 来构建RESTful服务、RESTful APIs,利用WebSocket双向通信的特性创建聊天室。

自从B/S架构(Browser/Server,浏览器/服务器模式)被发明以来,因为其具有跨平台、易移植、方便使用等特点,迅速地成为了技术架构的首选,前端Web 技术迅速发展起来。人们利用前端 Web技术构建各种应用场景,如电子商务平台、在线聊天室、后台管理系统等。页面技术也从最初的JSP演化为现在的模板引擎;信息交互由以前的XML发展到现在更流行的JSON;Spring Filter、loC、Aop等概念的发展更加方便人们构建Web系统。

Spring Boot 对Web开发的支持很全面,包括开发、测试和部署阶段都做了支持。spring-boot-starter-web是Spring Boot对Web开发提供支持的组件,主要包括RESTful,参数校验、使用Tomcat作为内嵌容器等功能,接下来给大家一一介绍。
 

JSON的支持

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等),这些特性使JSON成为理想的数据交换语言。

早期人们习惯使用XML进行信息交互,后来JSON的使用更加简单,到了现在信息交互大部分都以JSON为主。早期在Spring体系中使用JSON还比较复杂,需要配置多项XML和注解,现在在Spring Boot体系中,对JSON支持简单而又完善,在Web层使用仅仅只需要一个注解即可完成。接下来使用案例说明。

新建一个spring-boot-web项目,在pom.xml中添加Web依赖。
 

<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

启动类: 

package com.neo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WebApplication {

	public static void main(String[] args) {
		SpringApplication.run(WebApplication.class, args);
	}
}

在项目根路路径下新建 model 包,在包下新建一个实体类 User,User 信息如下:

package com.neo.model;

import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;

public class User {
    @NotEmpty(message="姓名不能为空")
    private String name;
    @Max(value = 100, message = "年龄不能大于100岁")
    @Min(value= 18 ,message= "必须年满18岁!" )
    private int age;
    @NotEmpty(message="密码不能为空")
    @Length(min=6,message="密码长度不能小于6位")
    private String pass;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    @Override
    public String toString() {
        return ("name=" + this.name + ",age=" + this.age + ",pass=" + this.pass);
    }
}

在项目中新建 Web 包,并在 Web 包下新建⼀一个类 WebController,在类中创建⼀一个方法返回 User,如下:

@RestController
public class WebController {
@RequestMapping(name="/getUser", method= RequestMethod.POST)
public User getUser() {
User user=new User();
user.setName("⼩小明");
user.setAge(12);
user.setPass("123456");
return user;
}
}

@RestController 注解相当于@ResponseBody+@Controller合在一起的作用,如果Web层的类上使用了@RestController注解,就代表这个类中所有的方法都会以JSON的形式返回结果,也相当于JSON的一种快捷使用方式;

@RequestMapping(name="/getUser",method=RequestMethod.POST),以/getUser的方式去请求,method=RequestMethod.POST 是指只可以使用Post的方式去请求,如果使用Get的方式去请求的话,则会报405不允许访问的错误。
 

在 test 包下新建 WebControllerTest 测试类,对 getUser() ⽅方法进行测试。

@SpringBootTest
public class WebControllerTest {
//省略略部分代码
@Test
public void getUser() throws Exception {
String responseString = mockMvc.perform(MockMvcRequestBuilders.post("/getU
ser"))
.andReturn().getResponse().getContentAsString();
System.out.println("result : "+responseString);
}
}

这里的测试代码和上面的稍有区别,“.andReturn().getResponse().getContentAsString(); ”的意思是获取请求的返回信息,并将返回信息转换为字符串,最后将请求的响应结果打印出来。执⾏完 Test,返回结果如下:

D:\software\java1.8.40\jdk1.8.0_40\bin\java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:65046,suspend=y,server=n -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:C:\Users\Mac\.IntelliJIdea2017.3\system\captureAgent\debugger-agent.jar=C:\Users\Mac\AppData\Local\Temp\capture.props -Dfile.encoding=UTF-8 -classpath "G:\idea2017\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar;G:\idea2017\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit-rt.jar;G:\idea2017\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit5-rt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\charsets.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\deploy.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\access-bridge-64.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\cldrdata.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\dnsns.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\jaccess.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\jfxrt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\localedata.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\nashorn.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunec.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunjce_provider.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunmscapi.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunpkcs11.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\zipfs.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\javaws.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jce.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jfr.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jfxswt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jsse.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\management-agent.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\plugin.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\resources.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\rt.jar;M:\work for myself\springboot42讲\【No570】精通Spring Boot42 讲 PDF教程\源码\spring-boot-leaning-gitbook_column2.0\spring-boot-leaning-gitbook_column2.0\第 2-1 课: Spring Boot 对基础 Web 开发支持\spring-boot-web\target\test-classes;M:\work for myself\springboot42讲\【No570】精通Spring Boot42 讲 PDF教程\源码\spring-boot-leaning-gitbook_column2.0\spring-boot-leaning-gitbook_column2.0\第 2-1 课: Spring Boot 对基础 Web 开发支持\spring-boot-web\target\classes;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.5.RELEASE\spring-boot-starter-web-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.5.RELEASE\spring-boot-starter-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.5.RELEASE\spring-boot-starter-logging-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Mac\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Mac\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Mac\.m2\repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;C:\Users\Mac\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Mac\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Mac\.m2\repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.5.RELEASE\spring-boot-starter-json-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.9.6\jackson-core-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.6\jackson-datatype-jdk8-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.6\jackson-datatype-jsr310-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.6\jackson-module-parameter-names-2.9.6.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.5.RELEASE\spring-boot-starter-tomcat-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.34\tomcat-embed-core-8.5.34.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.34\tomcat-embed-el-8.5.34.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.34\tomcat-embed-websocket-8.5.34.jar;C:\Users\Mac\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.12.Final\hibernate-validator-6.0.12.Final.jar;C:\Users\Mac\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Mac\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Mac\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-web\5.0.9.RELEASE\spring-web-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-beans\5.0.9.RELEASE\spring-beans-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-webmvc\5.0.9.RELEASE\spring-webmvc-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-aop\5.0.9.RELEASE\spring-aop-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-context\5.0.9.RELEASE\spring-context-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-expression\5.0.9.RELEASE\spring-expression-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-devtools\2.0.5.RELEASE\spring-boot-devtools-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot\2.0.5.RELEASE\spring-boot-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.5.RELEASE\spring-boot-autoconfigure-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.5.RELEASE\spring-boot-starter-test-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-test\2.0.5.RELEASE\spring-boot-test-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.5.RELEASE\spring-boot-test-autoconfigure-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Mac\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Mac\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Mac\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Mac\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\Mac\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Mac\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Mac\.m2\repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;C:\Users\Mac\.m2\repository\net\bytebuddy\byte-buddy\1.7.11\byte-buddy-1.7.11.jar;C:\Users\Mac\.m2\repository\net\bytebuddy\byte-buddy-agent\1.7.11\byte-buddy-agent-1.7.11.jar;C:\Users\Mac\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Mac\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Mac\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Mac\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Mac\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-core\5.0.9.RELEASE\spring-core-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-jcl\5.0.9.RELEASE\spring-jcl-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-test\5.0.9.RELEASE\spring-test-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 com.neo.web.WebControllerTest,getUser
Connected to the target VM, address: '127.0.0.1:65046', transport: 'socket'
21:10:44.270 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
21:10:44.275 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
21:10:44.276 [main] DEBUG org.springframework.core.env.StandardEnvironment - Initialized StandardEnvironment with PropertySources [MapPropertySource@1546908073 {name='systemProperties', properties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=D:\software\java1.8.40\jdk1.8.0_40\jre\bin, java.vm.version=25.40-b25, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=;, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user.country=CN, user.script=, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=, java.vm.specification.name=Java Virtual Machine Specification, user.dir=M:\work for myself\springboot42讲\【No570】精通Spring Boot42 讲 PDF教程\源码\spring-boot-leaning-gitbook_column2.0\spring-boot-leaning-gitbook_column2.0\第 2-1 课: Spring Boot 对基础 Web 开发支持\spring-boot-web, java.runtime.version=1.8.0_40-b25, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.endorsed.dirs=D:\software\java1.8.40\jdk1.8.0_40\jre\lib\endorsed, os.arch=amd64, java.io.tmpdir=C:\Users\Mac\AppData\Local\Temp\, line.separator=
, java.vm.specification.vendor=Oracle Corporation, user.variant=, os.name=Windows 8.1, sun.jnu.encoding=GBK, java.library.path=D:\software\java1.8.40\jdk1.8.0_40\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;D:\software\svn\bin;D:\software\java1.8.40\jdk1.8.0_40\bin;G:\Maven3.5.3\apache-maven-3.5.3-bin\apache-maven-3.5.3\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Program Files\MySQL\MySQL Server 5.6\bin;G:\Python3.8Install\Scripts\;G:\Python3.8Install\;C:\Users\Mac\AppData\Local\Microsoft\WindowsApps;;D:\software\idea2019\IntelliJ IDEA 2019.1.3\bin;;G:\PyCharmInstall\PyCharm 2019.2.5\bin;;., jboss.modules.system.pkgs=com.intellij.rt, java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, os.version=6.3, user.home=C:\Users\Mac, user.timezone=Asia/Shanghai, java.awt.printerjob=sun.awt.windows.WPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, java.class.path=G:\idea2017\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar;G:\idea2017\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit-rt.jar;G:\idea2017\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit5-rt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\charsets.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\deploy.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\access-bridge-64.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\cldrdata.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\dnsns.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\jaccess.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\jfxrt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\localedata.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\nashorn.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunec.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunjce_provider.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunmscapi.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunpkcs11.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\zipfs.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\javaws.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jce.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jfr.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jfxswt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jsse.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\management-agent.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\plugin.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\resources.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\rt.jar;M:\work for myself\springboot42讲\【No570】精通Spring Boot42 讲 PDF教程\源码\spring-boot-leaning-gitbook_column2.0\spring-boot-leaning-gitbook_column2.0\第 2-1 课: Spring Boot 对基础 Web 开发支持\spring-boot-web\target\test-classes;M:\work for myself\springboot42讲\【No570】精通Spring Boot42 讲 PDF教程\源码\spring-boot-leaning-gitbook_column2.0\spring-boot-leaning-gitbook_column2.0\第 2-1 课: Spring Boot 对基础 Web 开发支持\spring-boot-web\target\classes;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.5.RELEASE\spring-boot-starter-web-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.5.RELEASE\spring-boot-starter-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.5.RELEASE\spring-boot-starter-logging-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Mac\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Mac\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Mac\.m2\repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;C:\Users\Mac\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Mac\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Mac\.m2\repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.5.RELEASE\spring-boot-starter-json-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.9.6\jackson-core-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.6\jackson-datatype-jdk8-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.6\jackson-datatype-jsr310-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.6\jackson-module-parameter-names-2.9.6.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.5.RELEASE\spring-boot-starter-tomcat-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.34\tomcat-embed-core-8.5.34.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.34\tomcat-embed-el-8.5.34.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.34\tomcat-embed-websocket-8.5.34.jar;C:\Users\Mac\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.12.Final\hibernate-validator-6.0.12.Final.jar;C:\Users\Mac\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Mac\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Mac\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-web\5.0.9.RELEASE\spring-web-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-beans\5.0.9.RELEASE\spring-beans-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-webmvc\5.0.9.RELEASE\spring-webmvc-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-aop\5.0.9.RELEASE\spring-aop-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-context\5.0.9.RELEASE\spring-context-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-expression\5.0.9.RELEASE\spring-expression-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-devtools\2.0.5.RELEASE\spring-boot-devtools-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot\2.0.5.RELEASE\spring-boot-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.5.RELEASE\spring-boot-autoconfigure-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.5.RELEASE\spring-boot-starter-test-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-test\2.0.5.RELEASE\spring-boot-test-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.5.RELEASE\spring-boot-test-autoconfigure-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Mac\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Mac\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Mac\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Mac\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\Mac\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Mac\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Mac\.m2\repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;C:\Users\Mac\.m2\repository\net\bytebuddy\byte-buddy\1.7.11\byte-buddy-1.7.11.jar;C:\Users\Mac\.m2\repository\net\bytebuddy\byte-buddy-agent\1.7.11\byte-buddy-agent-1.7.11.jar;C:\Users\Mac\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Mac\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Mac\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Mac\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Mac\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-core\5.0.9.RELEASE\spring-core-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-jcl\5.0.9.RELEASE\spring-jcl-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-test\5.0.9.RELEASE\spring-test-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Mac\.IntelliJIdea2017.3\system\captureAgent\debugger-agent.jar, user.name=Mac, java.vm.specification.version=1.8, sun.java.command=com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 com.neo.web.WebControllerTest,getUser, java.home=D:\software\java1.8.40\jdk1.8.0_40\jre, sun.arch.data.model=64, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.windows.WToolkit, java.vm.info=mixed mode, java.version=1.8.0_40, java.ext.dirs=D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext;C:\Windows\Sun\Java\lib\ext, sun.boot.class.path=D:\software\java1.8.40\jdk1.8.0_40\jre\lib\resources.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\rt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\sunrsasign.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jsse.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jce.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\charsets.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jfr.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\classes;C:\Users\Mac\.IntelliJIdea2017.3\system\captureAgent\debugger-agent-storage.jar, java.vendor=Oracle Corporation, file.separator=\, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, idea.test.cyclic.buffer.size=1048576, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.desktop=windows, sun.cpu.isalist=amd64}}, SystemEnvironmentPropertySource@371439501 {name='systemEnvironment', properties={USERDOMAIN_ROAMINGPROFILE=DESKTOP-V68NSD8, LOCALAPPDATA=C:\Users\Mac\AppData\Local, PROCESSOR_LEVEL=6, IntelliJ IDEA=D:\software\idea2019\IntelliJ IDEA 2019.1.3\bin;, install_path=C:\Users\Mac\AppData\Roaming\快压, USERDOMAIN=DESKTOP-V68NSD8, FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer, LOGONSERVER=\\DESKTOP-V68NSD8, JAVA_HOME=D:\software\java1.8.40\jdk1.8.0_40, SESSIONNAME=Console, ALLUSERSPROFILE=C:\ProgramData, PROCESSOR_ARCHITECTURE=AMD64, PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules, SystemDrive=C:, OneDrive=C:\Users\Mac\OneDrive, APPDATA=C:\Users\Mac\AppData\Roaming, USERNAME=Mac, ProgramFiles(x86)=C:\Program Files (x86), CommonProgramFiles=C:\Program Files\Common Files, Path=C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;D:\software\svn\bin;D:\software\java1.8.40\jdk1.8.0_40\bin;G:\Maven3.5.3\apache-maven-3.5.3-bin\apache-maven-3.5.3\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Program Files\MySQL\MySQL Server 5.6\bin;G:\Python3.8Install\Scripts\;G:\Python3.8Install\;C:\Users\Mac\AppData\Local\Microsoft\WindowsApps;;D:\software\idea2019\IntelliJ IDEA 2019.1.3\bin;;G:\PyCharmInstall\PyCharm 2019.2.5\bin;, FPS_BROWSER_USER_PROFILE_STRING=Default, PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC, PyCharm=G:\PyCharmInstall\PyCharm 2019.2.5\bin;, DriverData=C:\Windows\System32\Drivers\DriverData, OS=Windows_NT, COMPUTERNAME=DESKTOP-V68NSD8, PROCESSOR_REVISION=4601, CommonProgramW6432=C:\Program Files\Common Files, ComSpec=C:\Windows\system32\cmd.exe, ProgramData=C:\ProgramData, ProgramW6432=C:\Program Files, HOMEPATH=\Users\Mac, SystemRoot=C:\Windows, TEMP=C:\Users\Mac\AppData\Local\Temp, MYSQL_HOME=C:\Program Files\MySQL\MySQL Server 5.6, HOMEDRIVE=C:, PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 70 Stepping 1, GenuineIntel, USERPROFILE=C:\Users\Mac, TMP=C:\Users\Mac\AppData\Local\Temp, M2_HOME=G:\Maven3.5.3\apache-maven-3.5.3-bin\apache-maven-3.5.3, CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files, ProgramFiles=C:\Program Files, PUBLIC=C:\Users\Public, NUMBER_OF_PROCESSORS=8, windir=C:\Windows, =::=::\}}]
21:10:44.544 [main] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking for request mappings in application context: org.springframework.test.web.servlet.setup.StubWebApplicationContext@61862a7f
21:10:44.622 [main] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 4 request handler methods found on class com.neo.web.WebController: {public java.lang.String com.neo.web.WebController.get(java.lang.String)={[/get/{name}],methods=[GET]}, public java.util.List com.neo.web.WebController.getUsers()={[/getUsers]}, public com.neo.model.User com.neo.web.WebController.getUser()={[/getUser],methods=[POST]}, public void com.neo.web.WebController.saveUser(com.neo.model.User,org.springframework.validation.BindingResult)={[/saveUser]}}
21:10:44.634 [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/get/{name}],methods=[GET]}" onto public java.lang.String com.neo.web.WebController.get(java.lang.String)
21:10:44.638 [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/getUsers]}" onto public java.util.List<com.neo.model.User> com.neo.web.WebController.getUsers()
21:10:44.639 [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/getUser],methods=[POST]}" onto public com.neo.model.User com.neo.web.WebController.getUser()
21:10:44.640 [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/saveUser]}" onto public void com.neo.web.WebController.saveUser(com.neo.model.User,org.springframework.validation.BindingResult)
21:10:45.237 [main] DEBUG org.jboss.logging - Logging Provider: org.jboss.logging.Log4j2LoggerProvider
21:10:45.238 [main] INFO org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator 6.0.12.Final
21:10:45.247 [main] DEBUG org.hibernate.validator.internal.engine.resolver.TraversableResolvers - Cannot find javax.persistence.Persistence on classpath. Assuming non JPA 2 environment. All properties will per default be traversable.
21:10:45.265 [main] DEBUG org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator - Loaded expression factory via original TCCL
21:10:45.265 [main] DEBUG org.hibernate.validator.internal.engine.ConfigurationImpl - Setting custom MessageInterpolator of type org.springframework.validation.beanvalidation.LocaleContextMessageInterpolator
21:10:45.266 [main] DEBUG org.hibernate.validator.internal.engine.ConfigurationImpl - Setting custom ParameterNameProvider of type org.springframework.validation.beanvalidation.LocalValidatorFactoryBean$1
21:10:45.269 [main] DEBUG org.hibernate.validator.internal.xml.config.ValidationXmlParser - Trying to load META-INF/validation.xml for XML based Validator configuration.
21:10:45.270 [main] DEBUG org.hibernate.validator.internal.xml.config.ResourceLoaderHelper - Trying to load META-INF/validation.xml via TCCL
21:10:45.271 [main] DEBUG org.hibernate.validator.internal.xml.config.ResourceLoaderHelper - Trying to load META-INF/validation.xml via Hibernate Validator's class loader
21:10:45.271 [main] DEBUG org.hibernate.validator.internal.xml.config.ValidationXmlParser - No META-INF/validation.xml found. Using annotation based configuration only.
21:10:45.441 [main] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.springframework.validation.beanvalidation.LocaleContextMessageInterpolator as ValidatorFactory-scoped message interpolator.
21:10:45.441 [main] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.resolver.TraverseAllTraversableResolver as ValidatorFactory-scoped traversable resolver.
21:10:45.441 [main] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.util.ExecutableParameterNameProvider as ValidatorFactory-scoped parameter name provider.
21:10:45.441 [main] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.DefaultClockProvider as ValidatorFactory-scoped clock provider.
21:10:45.441 [main] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.scripting.DefaultScriptEvaluatorFactory as ValidatorFactory-scoped script evaluator factory.
21:10:45.482 [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.test.web.servlet.setup.StubWebApplicationContext@61862a7f
21:10:45.535 [main] DEBUG org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - Looking for exception mappings: org.springframework.test.web.servlet.setup.StubWebApplicationContext@61862a7f
21:10:45.563 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Initializing servlet ''
21:10:45.564 [main] INFO org.springframework.mock.web.MockServletContext - Initializing Spring FrameworkServlet ''
21:10:45.564 [main] INFO org.springframework.test.web.servlet.TestDispatcherServlet - FrameworkServlet '': initialization started
21:10:45.568 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Unable to locate MultipartResolver with name 'multipartResolver': no multipart request handling provided
21:10:45.568 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Using LocaleResolver [org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver@1bd81830]
21:10:45.568 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Using ThemeResolver [org.springframework.web.servlet.theme.FixedThemeResolver@39ab59f8]
21:10:45.568 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Using RequestToViewNameTranslator [org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator@64e92d61]
21:10:45.568 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Using FlashMapManager [org.springframework.web.servlet.support.SessionFlashMapManager@111610e6]
21:10:45.568 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Published WebApplicationContext of servlet '' as ServletContext attribute with name [org.springframework.web.servlet.FrameworkServlet.CONTEXT.]
21:10:45.568 [main] INFO org.springframework.test.web.servlet.TestDispatcherServlet - FrameworkServlet '': initialization completed in 4 ms
21:10:45.568 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Servlet '' configured successfully
21:10:45.617 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - DispatcherServlet with name '' processing POST request for [/getUser]
21:10:45.618 [main] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /getUser
21:10:45.622 [main] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Returning handler method [public com.neo.model.User com.neo.web.WebController.getUser()]
21:10:45.720 [main] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor - Written [name=小明,age=12,pass=123456] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@11841b15]
21:10:45.721 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Null ModelAndView returned to DispatcherServlet with name '': assuming HandlerAdapter completed request handling
21:10:45.721 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Successfully completed request
Disconnected from the target VM, address: '127.0.0.1:65046', transport: 'socket'
result : {"name":"小明","age":12,"pass":"123456"}

Process finished with exit code 0

说明 Spring Boot 自动将 User 对象转成了 JSON 进行返回。那么如果返回的是一个 list 呢,在WebController 添加⽅法 getUsers(),代码如下:

@RequestMapping("/getUsers")
public List<User> getUsers() {
List<User> users=new ArrayList<User>();
User user1=new User();
user1.setName("neo");
user1.setAge(30);
user1.setPass("neo123");
users.add(user1);
User user2=new User();
user2.setName("⼩小明");
user2.setAge(12);
user2.setPass("123456");
users.add(user2);
return users;
}

添加测试方法:

@Test
public void getUsers() throws Exception {
String responseString = mockMvc.perform(MockMvcRequestBuilders.get("/getUsers"
))
.andReturn().getResponse().getContentAsString();
System.out.println("result : "+responseString);
}
D:\software\java1.8.40\jdk1.8.0_40\bin\java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:65146,suspend=y,server=n -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:C:\Users\Mac\.IntelliJIdea2017.3\system\captureAgent\debugger-agent.jar=C:\Users\Mac\AppData\Local\Temp\capture1.props -Dfile.encoding=UTF-8 -classpath "G:\idea2017\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar;G:\idea2017\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit-rt.jar;G:\idea2017\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit5-rt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\charsets.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\deploy.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\access-bridge-64.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\cldrdata.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\dnsns.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\jaccess.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\jfxrt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\localedata.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\nashorn.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunec.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunjce_provider.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunmscapi.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunpkcs11.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\zipfs.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\javaws.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jce.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jfr.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jfxswt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jsse.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\management-agent.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\plugin.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\resources.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\rt.jar;M:\work for myself\springboot42讲\【No570】精通Spring Boot42 讲 PDF教程\源码\spring-boot-leaning-gitbook_column2.0\spring-boot-leaning-gitbook_column2.0\第 2-1 课: Spring Boot 对基础 Web 开发支持\spring-boot-web\target\test-classes;M:\work for myself\springboot42讲\【No570】精通Spring Boot42 讲 PDF教程\源码\spring-boot-leaning-gitbook_column2.0\spring-boot-leaning-gitbook_column2.0\第 2-1 课: Spring Boot 对基础 Web 开发支持\spring-boot-web\target\classes;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.5.RELEASE\spring-boot-starter-web-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.5.RELEASE\spring-boot-starter-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.5.RELEASE\spring-boot-starter-logging-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Mac\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Mac\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Mac\.m2\repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;C:\Users\Mac\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Mac\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Mac\.m2\repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.5.RELEASE\spring-boot-starter-json-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.9.6\jackson-core-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.6\jackson-datatype-jdk8-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.6\jackson-datatype-jsr310-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.6\jackson-module-parameter-names-2.9.6.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.5.RELEASE\spring-boot-starter-tomcat-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.34\tomcat-embed-core-8.5.34.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.34\tomcat-embed-el-8.5.34.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.34\tomcat-embed-websocket-8.5.34.jar;C:\Users\Mac\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.12.Final\hibernate-validator-6.0.12.Final.jar;C:\Users\Mac\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Mac\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Mac\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-web\5.0.9.RELEASE\spring-web-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-beans\5.0.9.RELEASE\spring-beans-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-webmvc\5.0.9.RELEASE\spring-webmvc-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-aop\5.0.9.RELEASE\spring-aop-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-context\5.0.9.RELEASE\spring-context-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-expression\5.0.9.RELEASE\spring-expression-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-devtools\2.0.5.RELEASE\spring-boot-devtools-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot\2.0.5.RELEASE\spring-boot-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.5.RELEASE\spring-boot-autoconfigure-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.5.RELEASE\spring-boot-starter-test-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-test\2.0.5.RELEASE\spring-boot-test-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.5.RELEASE\spring-boot-test-autoconfigure-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Mac\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Mac\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Mac\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Mac\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\Mac\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Mac\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Mac\.m2\repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;C:\Users\Mac\.m2\repository\net\bytebuddy\byte-buddy\1.7.11\byte-buddy-1.7.11.jar;C:\Users\Mac\.m2\repository\net\bytebuddy\byte-buddy-agent\1.7.11\byte-buddy-agent-1.7.11.jar;C:\Users\Mac\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Mac\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Mac\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Mac\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Mac\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-core\5.0.9.RELEASE\spring-core-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-jcl\5.0.9.RELEASE\spring-jcl-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-test\5.0.9.RELEASE\spring-test-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.neo.web.WebControllerTest,getUsers
Connected to the target VM, address: '127.0.0.1:65146', transport: 'socket'
21:16:13.874 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
21:16:13.883 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
21:16:13.884 [main] DEBUG org.springframework.core.env.StandardEnvironment - Initialized StandardEnvironment with PropertySources [MapPropertySource@1546908073 {name='systemProperties', properties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=D:\software\java1.8.40\jdk1.8.0_40\jre\bin, java.vm.version=25.40-b25, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=;, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user.country=CN, user.script=, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=, java.vm.specification.name=Java Virtual Machine Specification, user.dir=M:\work for myself\springboot42讲\【No570】精通Spring Boot42 讲 PDF教程\源码\spring-boot-leaning-gitbook_column2.0\spring-boot-leaning-gitbook_column2.0\第 2-1 课: Spring Boot 对基础 Web 开发支持\spring-boot-web, java.runtime.version=1.8.0_40-b25, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.endorsed.dirs=D:\software\java1.8.40\jdk1.8.0_40\jre\lib\endorsed, os.arch=amd64, java.io.tmpdir=C:\Users\Mac\AppData\Local\Temp\, line.separator=
, java.vm.specification.vendor=Oracle Corporation, user.variant=, os.name=Windows 8.1, sun.jnu.encoding=GBK, java.library.path=D:\software\java1.8.40\jdk1.8.0_40\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;D:\software\svn\bin;D:\software\java1.8.40\jdk1.8.0_40\bin;G:\Maven3.5.3\apache-maven-3.5.3-bin\apache-maven-3.5.3\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Program Files\MySQL\MySQL Server 5.6\bin;G:\Python3.8Install\Scripts\;G:\Python3.8Install\;C:\Users\Mac\AppData\Local\Microsoft\WindowsApps;;D:\software\idea2019\IntelliJ IDEA 2019.1.3\bin;;G:\PyCharmInstall\PyCharm 2019.2.5\bin;;., jboss.modules.system.pkgs=com.intellij.rt, java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, os.version=6.3, user.home=C:\Users\Mac, user.timezone=Asia/Shanghai, java.awt.printerjob=sun.awt.windows.WPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, java.class.path=G:\idea2017\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar;G:\idea2017\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit-rt.jar;G:\idea2017\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit5-rt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\charsets.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\deploy.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\access-bridge-64.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\cldrdata.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\dnsns.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\jaccess.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\jfxrt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\localedata.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\nashorn.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunec.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunjce_provider.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunmscapi.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\sunpkcs11.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext\zipfs.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\javaws.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jce.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jfr.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jfxswt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jsse.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\management-agent.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\plugin.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\resources.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\rt.jar;M:\work for myself\springboot42讲\【No570】精通Spring Boot42 讲 PDF教程\源码\spring-boot-leaning-gitbook_column2.0\spring-boot-leaning-gitbook_column2.0\第 2-1 课: Spring Boot 对基础 Web 开发支持\spring-boot-web\target\test-classes;M:\work for myself\springboot42讲\【No570】精通Spring Boot42 讲 PDF教程\源码\spring-boot-leaning-gitbook_column2.0\spring-boot-leaning-gitbook_column2.0\第 2-1 课: Spring Boot 对基础 Web 开发支持\spring-boot-web\target\classes;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.5.RELEASE\spring-boot-starter-web-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.5.RELEASE\spring-boot-starter-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.5.RELEASE\spring-boot-starter-logging-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\Mac\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\Mac\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\Mac\.m2\repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;C:\Users\Mac\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\Mac\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\Mac\.m2\repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.5.RELEASE\spring-boot-starter-json-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.9.6\jackson-core-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.6\jackson-datatype-jdk8-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.6\jackson-datatype-jsr310-2.9.6.jar;C:\Users\Mac\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.6\jackson-module-parameter-names-2.9.6.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.5.RELEASE\spring-boot-starter-tomcat-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.34\tomcat-embed-core-8.5.34.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.34\tomcat-embed-el-8.5.34.jar;C:\Users\Mac\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.34\tomcat-embed-websocket-8.5.34.jar;C:\Users\Mac\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.12.Final\hibernate-validator-6.0.12.Final.jar;C:\Users\Mac\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\Mac\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\Users\Mac\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-web\5.0.9.RELEASE\spring-web-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-beans\5.0.9.RELEASE\spring-beans-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-webmvc\5.0.9.RELEASE\spring-webmvc-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-aop\5.0.9.RELEASE\spring-aop-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-context\5.0.9.RELEASE\spring-context-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-expression\5.0.9.RELEASE\spring-expression-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-devtools\2.0.5.RELEASE\spring-boot-devtools-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot\2.0.5.RELEASE\spring-boot-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.5.RELEASE\spring-boot-autoconfigure-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.5.RELEASE\spring-boot-starter-test-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-test\2.0.5.RELEASE\spring-boot-test-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.5.RELEASE\spring-boot-test-autoconfigure-2.0.5.RELEASE.jar;C:\Users\Mac\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\Mac\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\Mac\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\Mac\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\Mac\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\Mac\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\Mac\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\Mac\.m2\repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;C:\Users\Mac\.m2\repository\net\bytebuddy\byte-buddy\1.7.11\byte-buddy-1.7.11.jar;C:\Users\Mac\.m2\repository\net\bytebuddy\byte-buddy-agent\1.7.11\byte-buddy-agent-1.7.11.jar;C:\Users\Mac\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\Mac\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\Mac\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\Mac\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\Mac\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-core\5.0.9.RELEASE\spring-core-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-jcl\5.0.9.RELEASE\spring-jcl-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\springframework\spring-test\5.0.9.RELEASE\spring-test-5.0.9.RELEASE.jar;C:\Users\Mac\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\Mac\.IntelliJIdea2017.3\system\captureAgent\debugger-agent.jar, user.name=Mac, java.vm.specification.version=1.8, sun.java.command=com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.neo.web.WebControllerTest,getUsers, java.home=D:\software\java1.8.40\jdk1.8.0_40\jre, sun.arch.data.model=64, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.windows.WToolkit, java.vm.info=mixed mode, java.version=1.8.0_40, java.ext.dirs=D:\software\java1.8.40\jdk1.8.0_40\jre\lib\ext;C:\Windows\Sun\Java\lib\ext, sun.boot.class.path=D:\software\java1.8.40\jdk1.8.0_40\jre\lib\resources.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\rt.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\sunrsasign.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jsse.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jce.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\charsets.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\lib\jfr.jar;D:\software\java1.8.40\jdk1.8.0_40\jre\classes;C:\Users\Mac\.IntelliJIdea2017.3\system\captureAgent\debugger-agent-storage.jar, java.vendor=Oracle Corporation, file.separator=\, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, idea.test.cyclic.buffer.size=1048576, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.desktop=windows, sun.cpu.isalist=amd64}}, SystemEnvironmentPropertySource@371439501 {name='systemEnvironment', properties={USERDOMAIN_ROAMINGPROFILE=DESKTOP-V68NSD8, LOCALAPPDATA=C:\Users\Mac\AppData\Local, PROCESSOR_LEVEL=6, IntelliJ IDEA=D:\software\idea2019\IntelliJ IDEA 2019.1.3\bin;, install_path=C:\Users\Mac\AppData\Roaming\快压, USERDOMAIN=DESKTOP-V68NSD8, FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer, LOGONSERVER=\\DESKTOP-V68NSD8, JAVA_HOME=D:\software\java1.8.40\jdk1.8.0_40, SESSIONNAME=Console, ALLUSERSPROFILE=C:\ProgramData, PROCESSOR_ARCHITECTURE=AMD64, PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules, SystemDrive=C:, OneDrive=C:\Users\Mac\OneDrive, APPDATA=C:\Users\Mac\AppData\Roaming, USERNAME=Mac, ProgramFiles(x86)=C:\Program Files (x86), CommonProgramFiles=C:\Program Files\Common Files, Path=C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;D:\software\svn\bin;D:\software\java1.8.40\jdk1.8.0_40\bin;G:\Maven3.5.3\apache-maven-3.5.3-bin\apache-maven-3.5.3\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\MySQL\MySQL Utilities 1.6\;C:\Program Files\MySQL\MySQL Server 5.6\bin;G:\Python3.8Install\Scripts\;G:\Python3.8Install\;C:\Users\Mac\AppData\Local\Microsoft\WindowsApps;;D:\software\idea2019\IntelliJ IDEA 2019.1.3\bin;;G:\PyCharmInstall\PyCharm 2019.2.5\bin;, FPS_BROWSER_USER_PROFILE_STRING=Default, PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC, PyCharm=G:\PyCharmInstall\PyCharm 2019.2.5\bin;, DriverData=C:\Windows\System32\Drivers\DriverData, OS=Windows_NT, COMPUTERNAME=DESKTOP-V68NSD8, PROCESSOR_REVISION=4601, CommonProgramW6432=C:\Program Files\Common Files, ComSpec=C:\Windows\system32\cmd.exe, ProgramData=C:\ProgramData, ProgramW6432=C:\Program Files, HOMEPATH=\Users\Mac, SystemRoot=C:\Windows, TEMP=C:\Users\Mac\AppData\Local\Temp, MYSQL_HOME=C:\Program Files\MySQL\MySQL Server 5.6, HOMEDRIVE=C:, PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 70 Stepping 1, GenuineIntel, USERPROFILE=C:\Users\Mac, TMP=C:\Users\Mac\AppData\Local\Temp, M2_HOME=G:\Maven3.5.3\apache-maven-3.5.3-bin\apache-maven-3.5.3, CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files, ProgramFiles=C:\Program Files, PUBLIC=C:\Users\Public, NUMBER_OF_PROCESSORS=8, windir=C:\Windows, =::=::\}}]
21:16:14.101 [main] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking for request mappings in application context: org.springframework.test.web.servlet.setup.StubWebApplicationContext@61862a7f
21:16:14.170 [main] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - 4 request handler methods found on class com.neo.web.WebController: {public java.lang.String com.neo.web.WebController.get(java.lang.String)={[/get/{name}],methods=[GET]}, public com.neo.model.User com.neo.web.WebController.getUser()={[/getUser],methods=[POST]}, public java.util.List com.neo.web.WebController.getUsers()={[/getUsers]}, public void com.neo.web.WebController.saveUser(com.neo.model.User,org.springframework.validation.BindingResult)={[/saveUser]}}
21:16:14.184 [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/get/{name}],methods=[GET]}" onto public java.lang.String com.neo.web.WebController.get(java.lang.String)
21:16:14.187 [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/getUser],methods=[POST]}" onto public com.neo.model.User com.neo.web.WebController.getUser()
21:16:14.188 [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/getUsers]}" onto public java.util.List<com.neo.model.User> com.neo.web.WebController.getUsers()
21:16:14.188 [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/saveUser]}" onto public void com.neo.web.WebController.saveUser(com.neo.model.User,org.springframework.validation.BindingResult)
21:16:14.501 [main] DEBUG org.jboss.logging - Logging Provider: org.jboss.logging.Log4j2LoggerProvider
21:16:14.502 [main] INFO org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator 6.0.12.Final
21:16:14.512 [main] DEBUG org.hibernate.validator.internal.engine.resolver.TraversableResolvers - Cannot find javax.persistence.Persistence on classpath. Assuming non JPA 2 environment. All properties will per default be traversable.
21:16:14.526 [main] DEBUG org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator - Loaded expression factory via original TCCL
21:16:14.527 [main] DEBUG org.hibernate.validator.internal.engine.ConfigurationImpl - Setting custom MessageInterpolator of type org.springframework.validation.beanvalidation.LocaleContextMessageInterpolator
21:16:14.527 [main] DEBUG org.hibernate.validator.internal.engine.ConfigurationImpl - Setting custom ParameterNameProvider of type org.springframework.validation.beanvalidation.LocalValidatorFactoryBean$1
21:16:14.531 [main] DEBUG org.hibernate.validator.internal.xml.config.ValidationXmlParser - Trying to load META-INF/validation.xml for XML based Validator configuration.
21:16:14.532 [main] DEBUG org.hibernate.validator.internal.xml.config.ResourceLoaderHelper - Trying to load META-INF/validation.xml via TCCL
21:16:14.532 [main] DEBUG org.hibernate.validator.internal.xml.config.ResourceLoaderHelper - Trying to load META-INF/validation.xml via Hibernate Validator's class loader
21:16:14.533 [main] DEBUG org.hibernate.validator.internal.xml.config.ValidationXmlParser - No META-INF/validation.xml found. Using annotation based configuration only.
21:16:14.692 [main] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.springframework.validation.beanvalidation.LocaleContextMessageInterpolator as ValidatorFactory-scoped message interpolator.
21:16:14.692 [main] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.resolver.TraverseAllTraversableResolver as ValidatorFactory-scoped traversable resolver.
21:16:14.692 [main] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.util.ExecutableParameterNameProvider as ValidatorFactory-scoped parameter name provider.
21:16:14.692 [main] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.DefaultClockProvider as ValidatorFactory-scoped clock provider.
21:16:14.692 [main] DEBUG org.hibernate.validator.internal.engine.ValidatorFactoryImpl - HV000234: Using org.hibernate.validator.internal.engine.scripting.DefaultScriptEvaluatorFactory as ValidatorFactory-scoped script evaluator factory.
21:16:14.725 [main] INFO org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.test.web.servlet.setup.StubWebApplicationContext@61862a7f
21:16:14.761 [main] DEBUG org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver - Looking for exception mappings: org.springframework.test.web.servlet.setup.StubWebApplicationContext@61862a7f
21:16:14.784 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Initializing servlet ''
21:16:14.785 [main] INFO org.springframework.mock.web.MockServletContext - Initializing Spring FrameworkServlet ''
21:16:14.785 [main] INFO org.springframework.test.web.servlet.TestDispatcherServlet - FrameworkServlet '': initialization started
21:16:14.787 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Unable to locate MultipartResolver with name 'multipartResolver': no multipart request handling provided
21:16:14.787 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Using LocaleResolver [org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver@1bd81830]
21:16:14.787 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Using ThemeResolver [org.springframework.web.servlet.theme.FixedThemeResolver@39ab59f8]
21:16:14.788 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Using RequestToViewNameTranslator [org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator@64e92d61]
21:16:14.788 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Using FlashMapManager [org.springframework.web.servlet.support.SessionFlashMapManager@111610e6]
21:16:14.788 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Published WebApplicationContext of servlet '' as ServletContext attribute with name [org.springframework.web.servlet.FrameworkServlet.CONTEXT.]
21:16:14.788 [main] INFO org.springframework.test.web.servlet.TestDispatcherServlet - FrameworkServlet '': initialization completed in 3 ms
21:16:14.788 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Servlet '' configured successfully
21:16:14.825 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - DispatcherServlet with name '' processing GET request for [/getUsers]
21:16:14.826 [main] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Looking up handler method for path /getUsers
21:16:14.829 [main] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Returning handler method [public java.util.List<com.neo.model.User> com.neo.web.WebController.getUsers()]
21:16:14.830 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Last-Modified value for [/getUsers] is: -1
21:16:14.910 [main] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor - Written [[name=neo,age=30,pass=neo123, name=小明,age=12,pass=123456]] as "application/json" using [org.springframework.http.converter.json.MappingJackson2HttpMessageConverter@31fc71ab]
21:16:14.911 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Null ModelAndView returned to DispatcherServlet with name '': assuming HandlerAdapter completed request handling
21:16:14.911 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Successfully completed request
result : [{"name":"neo","age":30,"pass":"neo123"},{"name":"小明","age":12,"pass":"123456"}]

Disconnected from the target VM, address: '127.0.0.1:65146', transport: 'socket'

Process finished with exit code 0

说明不管是对象还是集合或者对象嵌套,Spring Boot 均可以将其转换为JSON字符串,这种方式特别适合系统提供接口时使用。

请求传参

请求传参是Web开发最基础的内容,前端浏览器和后端服务器正是依赖交互过程中的参数,来判断用户是否登录、用户正在执行时哪些动作,因此参数的传递和接收是一个Web系统最基础的功能。Spring Boot内置了很多种参数接收方式,提供一些注解来帮助限制请求的类型、接收不同格式的参数等,接下来我们举例介绍。

使用Spring Boot 可以轻松的对请求做一些限制,比如为了安全我们只允许POST请求的访问,只需要在方法上添加一个配置既可:
 

 @RequestMapping(value="/getUser", method= RequestMethod.GET)
    public User getUser() {
        User user=new User();
        user.setName("小明");
        user.setAge(12);
        user.setPass("123456");
        return user;
    }

这时候再以 GET 请求去访问,就会返回如下结果:

从返回的结果可以看出,根本没有返回任何信息。

如果要求其请求只支持GET请求,method 设置为:method=RequestMethod.GET;如果不进行设置默认两种方式的请求都支持。

Spring Web层支持多种方法传参,在上一节中我们传入一个属性name,直接使用对象接收也可以支持。
 

@RequestMapping(name="/getUser", method= RequestMethod.POST)
public String getUser(User user) {
...
}

这样的写法,只要是 User 的属性都会被自动填充到 User 对象中;还有另外一种传参的方式,使用 URL 进行传参,这种形式的传参地址栏会更更加美观一些。

@RequestMapping(value="get/{name}", method=RequestMethod.GET)
public String get(@PathVariable String name) {
    return name;
}

在浏览器器中输入网址:http://localhost:8080/get/neo,返回:neo,说明 name 值已经成功传入。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值