SpringMVC框架 - 获取请求参数常用的注解

目录

  • [1. RequestParam注解](#1. RequestParam注解)
  • [2. RequestBody注解](#2. RequestBody注解)
  • [3. RequestHeader注解](#3. RequestHeader注解)
  • [4. CookieValue注解](#4. CookieValue注解)
  • [5. PathVaribale注解](#5. PathVaribale注解)

获取请求参数常用的注解有5个:

  1. RequestParam注解
  2. RequestBody注解
  3. RequestHeader注解
  4. CookieValue注解
  5. PathVaribale注解

1. RequestParam注解

作用

用于将请求参数绑定到控制器方法的参数上,主要处理URL中的查询参数或表单数据。

也就是说,把请求中的指定名称的参数传递给控制器中的形参赋值。

属性

  1. value/name:请求参数中的名称
  2. required:请求参数中是否必须提高此参数,默认是true,必须提供
  3. defaultValue:指定默认的值(如果没有传请求参数,使用默认指定的值)

使用场景

  1. 获取URL查询参数:?name=value&key=value
  2. 获取表单提交的字段值:application/x-www-form-urlencoded
  3. 分页查询参数
  4. 搜索过滤条件

操作案例

  1. jsp页面
jsp 复制代码
<h3>RequestParam注解</h3>
<form method="post" action="/dept/dept.do">
    姓名:<input type="text" name="username"><br/>
    年龄:<input type="text" name="age"><br/>
    <input type="submit" value="提交"><br/>
</form>
  1. Controller代码
java 复制代码
package com.qcby.demo2;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@RequestMapping("/dept")
@Controller
public class DeptController {
    /**
     * RequestParam注解
     * value:请求参数名称
     * required = false:默认值是true,必须要传请求参数,不传就会报错
     * defaultValue = "abc":如果没有传请求参数,使用默认指定的值abc
     * @param name
     * @return
     */
    @RequestMapping("/dept.do")
    public String save(@RequestParam(value = "username",required = false,defaultValue = "abc")String name){
        System.out.println("姓名:"+name);
        return "suc";
    }
}
  1. 输出结果

    姓名:张三

2. RequestBody注解

作用

用于将HTTP请求体中的JSON/XML 数据绑定到Java对象上,主要处理POST/PUT请求的请求体数据(get请求不可以)。

属性

  1. required:是否必须有请求体,默认值是true

使用场景

  1. Restful API的创建、更新操作
  2. 接受前端提交的JSON/XML数据
  3. 批量数据处理
  4. 前端通过Ajax发送的复杂对象的数据绑定

操作案例

  1. jsp页面
jsp 复制代码
<h3>RequestBody注解</h3>
<form method="post" action="/dept/body.do">
    姓名:<input type="text" name="username"><br/>
    年龄:<input type="text" name="age"><br/>
    <input type="submit" value="提交"><br/>
</form>
  1. Controller代码
java 复制代码
/**
 * @RequestBody注解:用于post/put请求方法
 * 什么请求需要使用,什么情况下不需要
 * @param body
 * @return
 */
@RequestMapping("/body.do")
public String save2(@RequestBody String body){
    System.out.println("请求体内容:"+body);
    return "suc";
}
  1. 输出结果

    请求体内容:username=%E8%B5%B5%E5%85%AD&age=21

3. RequestHeader注解

作用

用于将HTTP请求头信息绑定到控制器方法的参数上。

属性

  1. value/name:请求头名称
  2. required:是否必须,默认true
  3. defaultValue:默认值

使用场景

  1. 获取认证信息(Authorization头)
  2. 获取客户端信息(User-Agent)
  3. 处理多语言(Accept-Language)
  4. 自定义业务头信息处理
  5. API版本控制

操作案例

  1. jsp页面
jsp 复制代码
<h3>RequestHeader注解</h3>
<form method="post" action="/dept/header.do">
    姓名:<input type="text" name="username"><br/>
    年龄:<input type="text" name="age"><br/>
    <input type="submit" value="提交"><br/>
</form>
  1. Controller代码
java 复制代码
/**
 * RequestHeader注解
 * @param header
 * @return
 */
@RequestMapping("/header.do")
public String save3(@RequestHeader(value = "Accept") String header){
    System.out.println("Accept请求头的值:"+header);
    return "suc";
}
  1. 输出结果

    Accept请求头的值:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7

4. CookieValue注解

作用

用于获取指定cookie的名称的值。

属性

  1. value/name:Cookie名称
  2. required:是否必须,默认true
  3. defaultValue:默认值

使用场景

  1. 会话管理(JSESSIONID)
  2. 用户偏好设置(主题、语言)
  3. 跟踪用户行为
  4. 记住登录状态

操作案例

  1. jsp页面
jsp 复制代码
<h3>CookieValue注解</h3>
<form method="post" action="/dept/cookie.do">
    姓名:<input type="text" name="username"><br/>
    年龄:<input type="text" name="age"><br/>
    <input type="submit" value="提交"><br/>
</form>
  1. Controller代码
java 复制代码
/**
 * CookieValue注解
 * @param cookie
 * @return
 */
@RequestMapping("/cookie.do")
public String save4(@CookieValue(value = "JSESSIONID") String cookie){
    System.out.println("值:"+cookie);
    return "suc";
}
  1. 输出结果

    值:0B73C7544168540B92D6592C2147F57C


5. PathVaribale注解

作用

用于将URL模板变量绑定到控制器方法的参数上,主要用于RESTful风格的URL。

拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符

属性

  1. value:指定url中的占位符名称

使用场景

  1. RESTful API的资源标识
  2. 层级资源访问
  3. 语义化URL
  4. SEO友好的URL结构

Restful风格的URL

  1. 请求路径一样,可以根据不同的请求方式去执行后台的不同方法
  2. restful风格的URL优点
    • 结构清晰
    • 符合标准
    • 易于理解
    • 扩展方便

操作案例

  1. jsp页面

    jsp 复制代码
    <h3>@PathVariable注解</h3>
    <form method="post" action="/emp">
        <input type="submit" value="提交 - post请求方式"><br/>
    </form>
    
    <h3>@PathVariable注解2</h3>
    <a href="/emp">get请求方式</a>
    
    <h3>@PathVariable注解3</h3>
    <form method="get" action="/emp/1">
        <input type="submit" value="提交 - 通过占位符查找"><br/>
    </form>
  2. Controller代码

    java 复制代码
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    @Controller
    public class EmpController {
        /**
         * 保存
         * @return
         */
        @RequestMapping(path = "/emp",method = RequestMethod.POST)
        public String save(){
            System.out.println("保存员工......");
            return "suc";
        }
    
        /**
         * 查询所有
         * @return
         */
        @RequestMapping(path = "/emp",method = RequestMethod.GET)
        public String findAll(){
            System.out.println("查询员工......");
            return "suc";
        }
    
        /**
         * 通过id查询
         * @param id
         * @return
         */
        @RequestMapping(path = "/emp/{id}",method = RequestMethod.GET)
        public String findById(@PathVariable(value = "id")Integer id){
            System.out.println("通过id查询员工..."+id);
            return "suc";
        }
    }
  3. 输出结果

    复制代码
    保存员工......
    查询员工......
    通过id查询员工...1
相关推荐
c***93771 小时前
springboot使用logback自定义日志
java·spring boot·logback
雨中飘荡的记忆1 小时前
Spring表达式详解
spring
七夜zippoe1 小时前
JVM调优实战:从GC日志分析到参数配置(Xmx, Xms, XX:+)
java·jvm·gc·jit·垃圾回收器
这不小天嘛2 小时前
多模态智能对话系统-后端开发
java
2509_940880222 小时前
springboot集成onlyoffice(部署+开发)
java·spring boot·后端
n***63272 小时前
SpringCloud 微服务框架
spring·spring cloud·微服务
切糕师学AI2 小时前
Spring 中的 @Service 注解
java·spring
10km2 小时前
java:Apache Commons Configuration2 占位符使用详解
java·apache·占位符·configuration2·commons·interpolator
qq_479875432 小时前
X-Macros(3)
java·开发语言