springMVC之RequestMapping注解之其他属性

91 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第28天,点击查看活动详情

@RequestMapping注解的params属性(了解)

  • @RequestMapping注解的params属性通过请求的请求参数匹配请求映射

  • @RequestMapping注解的params属性是一个字符串类型的数组,可以通过四种表达式设置请求参数和请求映射的匹配关系

  1. "param":要求请求映射所匹配的请求必须携带param请求参数
    例如:
    @RequestMapping(value = {"/test"},params = {"name"})
    客户端发送请求时,必须携带key为name的参数
  1. "!param":要求请求映射所匹配的请求必须不能携带param请求参数
  @RequestMapping(value = {"/test"},params = {"!name"})
  客户端发送请求时,不能携带key为name的参数,否则页面报400错误
  1. "param=value":要求请求映射所匹配的请求必须携带param请求参数且param=value
   @RequestMapping(value = {"/test"},params = {"name=zhangsan"})
   客户端发送请求时,必须携带key为name的参数,参数值必须为zhangsan,否则报400错误
  1. "param!=value":要求请求映射所匹配的请求必须携带param请求参数但是param!=value
  @RequestMapping(value = {"/test"},params = {"name!=zhangsan"})
  客户端发送请求时,必须携带key为name的参数,但是参数的值不能是zhangsan

可以通过<a th:href= "@{/test(username='zhangsan')}" >进行测试

RequestMapping注解的headers属性(了解)

  • @RequestMapping注解的headers属性通过请求的请求头信息匹配请求映射

  • @RequestMapping注解的headers属性是一个字符串类型的数组, 可以通过四种表达式设置请求头信息和请求映射的匹配关系

  1. "header":要求请求映射所匹配的请求必须携带header请求头信息

  2. "!header":要求请求映射所匹配的请求必须不能携带header请求头信息

  3. "header=value":要求请求映射所匹配的请求必须携带header请求头信息且header=value

  4. "header!=value":要求请求映射所匹配的请求必须携带header请求头信息且header!=value

若当前请求满足@RequestMapping注解的value和method属性,但是不满足headers属性,此时页面显示404错 误,即资源未找到

headers属性可以通过浏览器控制台中查看

image.png

使用方法与上面的params属性类型,例如:

@RequestMapping(
    value = "/test",
    params = {"name" },
    headers = {"Host=localhost:8080"}

SpringMVC支持ant风格的路径

  • ? :表示任意的单个字符,例如:
 /@RequestMapping( "/a?a/test"),
    当我们使用`/a1a/test`时,可以匹配ant风格
  • *:表示任意的0个或多个字符,例如
 /@RequestMapping( "/a*a/test"),
    当我们使用`/a10000a/test``/aa/test`时,可以匹配ant风格
  • **:表示任意的一层或多层目录
 /@RequestMapping( "/a?a/test"),
    当我们使用`/**/test`时,可以匹配ant风格

注意:在使用**时,只能使用/**/xxx的方式

8、SpringMVC支持路径中的占位符(重点)

  • 原始方式: /addUser?name=zhangsan
  • rest方式: /addUser/zhangsan

SpringMVC路径中的占位符常用于restful风格中,当请求路径中将某些数据通过路径的方式传输到服务器中,就 可以在相应的@RequestMapping注解的value属性中通过占位符{xx}表示传输的数据,在通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参

例如:我们需要获取到name参数,来执行我们的方法,我们就可以使用路径占位符的方式:

@RequestMapping(" /addUser/{name}/")
public String addUser (@PathVariable("name") String name){
    System. out. print1n("name: "+name);
    return "success";
}
//最终输出的内容为-->name:admin