上一篇文章我们已经学会了如何通过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
发布评论请先 登录
相关推荐
启动Spring Boot项目应用的三种方法
谈一谈Spring Boot嵌入式Web容器
Spring Boot定时任务的重写方法
Spring Boot从零入门1 详述
「Spring认证」什么是Spring GraphQL?

学习Spring Boot 嵌入式服务器

Spring Boot特有的实践
Spring Boot配置加载相关知识
Spring Boot Actuator快速入门
Spring Boot启动 Eureka流程

Spring Boot的启动原理

评论