SpringBoot Web开发设置请求映射规则

前言

本篇文章介绍 SpringBoot Web 开发中的请求映射注解的详细使用,希望观众老爷们多多支持,欢迎在评论区批评指正!

设置请求映射规则通过 @RequestMapping注解,该注解标注在类或者方法上;

SpringBoot Web开发设置请求映射规则

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

1. 指定请求路径

SpringBoot Web开发设置请求映射规则

@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数组,也就是说我们可以为一个方法指定多个请求路径。

SpringBoot Web开发设置请求映射规则

2. 指定请求方式

SpringBoot Web开发设置请求映射规则

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

SpringBoot Web开发设置请求映射规则

比如,前端发送的请求方式为 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数组,也就是说我们可以为一个方法指定多种请求方式。

SpringBoot Web开发设置请求映射规则

3. 指定请求参数

SpringBoot Web开发设置请求映射规则

@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. 指定请求头

SpringBoot Web开发设置请求映射规则

@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 进行限制

SpringBoot Web开发设置请求映射规则

@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. 设置数据的返回类型和编码

SpringBoot Web开发设置请求映射规则

@RequestMapping注解的 produces属性(类型为 String[]),可以对请求处理的数据返回类型和编码进行限制。

  1. 如指定数据返回格式为 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

SpringBoot Web开发设置请求映射规则
@Controller
@RequestMapping("/user/")
public class HelloController {

@RequestMapping("/hi")
@ResponseBody
public List<String> hello(){
List<String> list = new ArrayList<>();
list.add("hi");
return list;
}
}

返回的 json数据

SpringBoot Web开发设置请求映射规则
  1. 如指定数据返回格式为 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;
}

}
SpringBoot Web开发设置请求映射规则

「注意」

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

SpringBoot Web开发设置请求映射规则

produces「属性的好处」:一个是浏览器查看方便(json自动格式化,带搜索),另一个可以防止中文乱码,或者你需要返回 xml格式的时候有用。

原文始发于微信公众号(yanghi):SpringBoot Web开发设置请求映射规则

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/226771.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!