上一篇文章我们已经学会了如何通过IDEA快速建立一个Spring Boot项目,还介绍了Spring Boot项目的结构,介绍了项目配置文件pom.xml的组成部分,并且撰写了我们Spring Boot的第一个接口。接下来将会将会介绍使用Spring Boot开发Web应用的相关内容,其主要包括使用spring-boot-starter-web组件来实现Web应用开发、URL地址映射、参数传递、数据校验规、统一数据返回和统一异常处理等等。
Web基础
Spring Boot将传统Web开发的mvc、json、validation、tomcat等框架整合,提供了spring-boot-starter-web组件,简化了Web应用配置和开发的难度,将开发者从繁杂的配置项中拯救出来,专注于业务逻辑的开发。
正如上一篇文章所提到的,我们只需要在pom.xml文件中的dependencies中添加以下代码就可以引入spring-boot-starter-web。其中的webmvc是Web开发的基础框架,json是JSON数据解析组建,tomcat为自带的容器依赖。
<dependency>
<groupId>org.springframework.boot<span class="hljs-name"groupId>
<artifactId>spring-boot-starter-web<span class="hljs-name"artifactId>
<span class="hljs-name"dependency>
@Controller和@RestController
Spring Boot提供了@Controller和@RestController两种注解来标识此类负责接收和处理HTTP请求,如果请求的是页面和数据,使用@Controller注解即可,如何只请求数据,则可以使用哦@RestController注解。
@Controller
@Controller主要主要用于页面和数据的返回,如果在@Controller类中只返回数据到前台页面,则需要使用@ResponseBody注解,否则会报错,其代码如下:
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String hello() {
return "Hello @Spring Boot!!!";
}
}
@RestController
@RestController注解用于实现数据请求的处理,默认情况下@RestController注解会将返回的对象数据转换为JSON格式,其代码如下:
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/getUser")
@ResponseBody
public User getUser() {
User u = new User();
u.setName("QStack");
u.setAge(20);
u.setPassword("123456");
return u;
}
}
在上述的例子中,定义/user/getUser接口返回JSON格式的User数据,近几年前端框架越来越强大,前后端分离的RESTful架构成为主流,Spring Boot对RESTful也做了非常完善的支持,使用也特别简单,使用@RestController注解自动返回JSON格式的数据,与此同时可以使用@GetMapping和@PostMapping等注解实现映射RESTful接口。
@ResponseBody
@ResponseBody注解主要用于定义数据的返回格式,作用在方法上,默认使用Json序列化成JSON字符串后返回给客户端,如果是字符串则直接返回。在@Controller中有时需要返回数据体,则需要在方法上使用@Responsebody。
@RequestMapping与URL映射
注解@RequestMapping注解主要负责URL的路由映射,它可以添加在Controller类或具体的方法上,如果添加在Controller类上,则这个Controller中所有的路由映射都会加上此映射规则,如果添加在方法上则只对当前方法生效。@RequestMapping注解包含很多属性参数来定义HTTP,具体属性参数如下所示,与此相应的Spring Boot支持URL路径匹配、HTTP Method匹配、params和header匹配等URL映射。
- value:请求URL的路径,支持URL模版、正则表达式
- method:HTTP请求的方法
- consumes:允许的媒体类型,如consumes=“application/json”为HTTP的Content-Type
- produces:相应的媒体类型,如produces=“application/json”为HTTP的Accept字段
- params:请求参数
- headers:请求头参数
URL路径匹配
精确匹配
@RequestMapping的value属性用于匹配URL映射,value支持简单表达式。示例代码如下,其中@PathVariable注解作用在方法参数中,用于表示参数的值来自于URL路径。
@RequestMapping("/getUserById/{id}")
public String getUserById(@PathVariable("id") Long id) {
return "getUserById" + id;
}
如果URL中的参数名称与方法中的参数名一致,则可以简化为如下
@RequestMapping("/getUserById/{id}")
public String getUserById(@PathVariable Long id) {
return "getUserById" + id;
}
通配符匹配
@RequsetMapping支持使用通配符匹配URL,用于统一映射某些URL规则类似的请求,示例的代码如下
@RequestMapping("/getJson/*.json")
public String getJson() {
return "get json data";
}
在上例中,无论请求/getJson/a.json还是请求/getJson/b.json都会匹配到getJson方法。
Method匹配
@RequestMapping注解提供了method参数指定请求的Mathod类型,包括RequestMethod.GET 、RequestMethod.POST、RequestMethod.DELETE、RequestMethod.PUT等值,分别对应HTTP请求的Method,以下是以GET方法为例说明。
@RequestMapping(value = "/getData", method = RequestMethod.GET)
public String getData() {
return "RequestMethod GET";
}
consumes和produces匹配
@RequestMapping注解提供了consumes和produces参数用于验证HTTP请求的内容类型和返回类型。
- consumes表示请求的HTTP头的Content-Type媒体类型与consumes的值匹配才可以调用方法。
- produces表示HTTP请求中Accept字段匹配成功才可以调用。下面的例子演示了consumes参数的用法。
@RequestMapping(value = "/content", method = RequestMethod.POST, consumes = "application/json")
public String Consumes(@RequestBody Map param){
return "Consumes POST Content-Type=application/json";
}
params和header匹配
@RequestMapping注解还提供header参数和params参数映射URL请求的能力,Spring Boot可以从请求参数或HTTP头中提取参数,通过判断参数如params=“action=save”是否通过来实现映射,代码如下
@RequestMapping(value = "/testParam", params = "action=save")
public String testParam(@RequestBody Map param) {
return "param test";
}
@RequestMapping(value = "/testHead", headers = {"Host=localhost:8080"})
public String testHead() {
return "header test";
}
-
Web
+关注
关注
2文章
1262浏览量
69441 -
URL
+关注
关注
0文章
139浏览量
15328 -
spring
+关注
关注
0文章
340浏览量
14340 -
idea
+关注
关注
1文章
68浏览量
4272
发布评论请先 登录
相关推荐
评论