前言
本篇文章介绍 SpringBoot Web
开发中的请求映射注解的详细使用,希望观众老爷们多多支持,欢迎在评论区批评指正!
设置请求映射规则通过 @RequestMapping
注解,该注解标注在类或者方法上;

该注解用来设定所能匹配请求的要求。只有符合了设置的要求,请求才能被该注解标注的方法或类处理。
1. 指定请求路径

@RequestMapping
注解的默认属性 value
,或者属性 path
都可以用来指定请求路径。
例如我们当前端发送请求时,请求路径为 /user/login
,那么就可以对此请求处理的 controller
层类的方法上,通过 @RequestMapping
注解,指定请求路径。
@Controller
public class UserController {
@RequestMapping("/user/login")
public void login(){
}
}
通常一个 controller
层的具体类,用于一个方面的全部请求的处理,如用户请求处理、管理员请求处理等。那么我们可以这样做:将@RequestMapping
注解标注在类上,使这个 controller
类,只处理针对用户的请求;在具体的请求方法上标注 @RequestMapping
注解,指定具体路径,如登录、获取用户信息等。
@Controller
@RequestMapping('/user/')
public class UserController {
@RequestMapping("/info")
public void getUserInfo(){
}
}
「注意」
我们观察到 value/path
属性是一个 String
数组,也就是说我们可以为一个方法指定多个请求路径。

2. 指定请求方式

@RequestMapping
注解的 method
属性,用于指定请求的方式,有以下几种请求方式:默认方式为 GET

比如,前端发送的请求方式为 POST
,那么我们就需要通过 method
属性指定请求方式了。
@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping(value = "/login", method = RequestMethod.POST)
public void login(){
}
}
RequestMethod
枚举类,是请求方式的枚举。
「更快的指定请求方式」
如果想要更快的指定请求方式,那么我们可以使用以下注解:
-
@GetMapping
注解 -
@PostMapping
注解 -
@DeleteMapping
注解 -
@PutMapping
注解
例如 @PostMapping
注解等价于 @RequestMapping(method = RequestMethod.POST)
「注意」
我们观察到 method
属性是一个 RequestMethod
数组,也就是说我们可以为一个方法指定多种请求方式。

3. 指定请求参数

@RequestMapping
注解的 params
属性(类型为 String[]
),用于指定请求参数。我们可以对请求参数进行一些限制,如必须具有某些参数,或者某些参数必须为某个值,或者某个参数必须不为某个值。
比如我们期望一个 GET
请求必须携带参数 code
被请求方法处理:
@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping(value = "/hello" , params = "code")
public String hello(){
return "Hello SpringBoot";
}
}
不能携带 code
参数:
@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping(value = "/hello" , params = "!code")
public String hello(){
return "Hello SpringBoot";
}
}
必须携带这个 code
参数,且 code
参数值必须为某个值:
@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping(value = "/hello" , params = "code=0000")
public String hello(){
return "Hello SpringBoot";
}
}
必须携带这个 code
参数,且 code
参数不能为某个值:
@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping(value = "/hello" , params = "code!=0000")
public String hello(){
return "Hello SpringBoot";
}
}
当然我们也可以指定必须携带多个请求参数,如:
@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping(value = "/login", method = RequestMethod.POST, params = {"username", "password"})
public void login(){
}
}
4. 指定请求头

@RequestMapping
注解的 headers
属性(类型为 String[]
),用于对请求头进行一些限制。
比如我们期望一个 GET
请求,必须携带请求头 deviceType
才能被请求方法处理:
@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping(value = "/hello" , headers = "deviceType")
public String hello(){
return "Hello SpringBoot";
}
}
不能携带请求头 deviceType
才能被请求方法处理:
@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping(value = "/hello" , headers = "!deviceType")
public String hello(){
return "Hello SpringBoot";
}
}
必须携带请求头 deviceType
,且请求头 deviceType
必须为某个值:
@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping(value = "/hello" , headers = "deviceType=ios")
public String hello(){
return "Hello SpringBoot";
}
}
必须携带请求头 deviceType
,且请求头 deviceType
不能为某个值:
@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping(value = "/hello" , headers = "deviceType!=ios")
public String hello(){
return "Hello SpringBoot";
}
}
当然我们也可以指定必须携带多个请求头参数,如:
@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping(value = "/hello" , headers = {"deviceType","deviceSize"})
public String hello(){
return "Hello SpringBoot";
}
}
5. 对请求头 Content-Type 进行限制

@RequestMapping
注解的 consumes
属性(类型为 String[]
),用于对请求头(Content-Type
)进行一些限制。
如前端发送一个 POST
请求,并且请求头的 Content-Type
必须为 multipart/from-data
的请求,才能被请求方法处理:
@Controller
@RequestMapping("/user/")
public class HelloController {
@PostMapping(value = "/upload", consumes = "multipart/from-data")
public void file(){
}
}
请求头的 Content-Type
不能为 multipart/from-data
的请求,才能被请求方法处理:
@Controller
@RequestMapping("/user/")
public class HelloController {
@PostMapping(value = "/upload", consumes = "!multipart/from-data")
public void file(){
}
}
6. 设置数据的返回类型和编码

@RequestMapping
注解的 produces
属性(类型为 String[]
),可以对请求处理的数据返回类型和编码进行限制。
-
如指定数据返回格式为 json
,编码为utf8
,访问这个接口:
@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping(value="/hi",produces = {"application/json;charset=UTF-8"})
@ResponseBody
public String hello(){
List<String> list = new ArrayList<>();
list.add("hi");
return list;
}
}
但是一般不需要这样做,当方法标注了 @ResponseBody
默认会返回 json
的数据,因为 spring-boot-starter-web
包含了 jackson
依赖,会将 java
对象自动转换为 json
。

@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping("/hi")
@ResponseBody
public List<String> hello(){
List<String> list = new ArrayList<>();
list.add("hi");
return list;
}
}
返回的 json
数据

-
如指定数据返回格式为 xml
,编码为uft8
时,我们需要在pom.xml
中引入jackson xml
依赖,就能返回xml
格式的数据了。
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-xml-provider</artifactId>
</dependency>
@Controller
@RequestMapping("/user/")
public class HelloController {
@RequestMapping(value="/hi",produces = {"application/xml;charset=UTF-8"})
@ResponseBody
public String hello(){
List<String> list = new ArrayList<>();
list.add("hi");
return list;
}
}

「注意」:
使用@RequestMapping
注解的 produces
属性必须要和 @ResponseBody
注解一起使用才可以,不加@ResponseBody
注解相当于返回模板文件地址(SpringBoot
默认),那样就出错了

produces
「属性的好处」:一个是浏览器查看方便(json自动格式化,带搜索),另一个可以防止中文乱码,或者你需要返回 xml
格式的时候有用。
原文始发于微信公众号(yanghi):SpringBoot Web开发设置请求映射规则
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/226771.html