• SpringBoot 接收客户端提交数据/参数会使用到相关注解


    目录

    一.基本介绍

    二.接收参数相关注解应用实例

    1.需求:

    2.应用实例演示

    2.1演示@PathVariable 使用

    2.2.演示@RequestHeader 使用

    2.3演示@RequestParam 使用

    2.4演示@CookieValue 使用

    2.5演示@RequestBody 使用

    2.6演示@RequestAttribute,SessionAttribute 使用

    三.复杂参数

    1.基本介绍

    2.复杂参数应用实例

    2.1说明 :

    2.2代码演示

    四.自定义对象参数-自动封装

    1.基本介绍

    2.自定义对象参数-应用实例

    2.1需求说明 :

    2.2代码实现

    一.基本介绍

    1. SpringBoot 接收客户端提交数据/参数会使用到相关注解
    2. 详 解 @PathVariable 、 @RequestHeader 、 @ModelAttribute 、 @RequestParam 、
    @MatrixVariable、@CookieValue、@RequestBody

    二.接收参数相关注解应用实例

    1.需求:

    演示各种方式提交数据/参数给服务器,服务器如何使用注解接收

    2.应用实例演示

    1. <html lang="en">
    2. <head>
    3. <meta charset="UTF-8">
    4. <title>indextitle>
    5. head>
    6. <body>
    7. <h1>hello, 海绵hongh1>
    8. 基本注解:
    9. <hr/>
    10. <a href="/monster/200/jack">@PathVariable-路径变量 monster/200/jacka><br/><br/>
    11. <a href="/requestHeader">@RequestHeader-获取Http请求头 a><br/><br/>
    12. <a href="/hi?name=hong&fruit=apple&fruit=pear&id=300&address=深圳">@RequestParam-获取请求参数a><br/><br/>
    13. <a href="/cookie">@CookieValue-获取cookie值a><br/><br/>
    14. <a href="/login">@RequestAttribute-获取request域属性-a>
    15. <hr/>
    16. <h1>测试@RequestBody获取数据: 获取POST请求体h1>
    17. <form action="/save" method="post">
    18. 姓名: <input name="name"/> <br>
    19. 年龄: <input name="age"/> <br/>
    20. <input type="submit" value="提交"/>
    21. form>
    22. body>
    23. html>

    需求: 演示各种方式提交数据/参数给服务器,服务器如何使用注解接收

    2.1演示@PathVariable 使用

    1. @RestController
    2. public class ParameterController {
    3. /**
    4. * /monster/{id}/{name} 解读
    5. * 1. /monster/{id}/{name} 构成完整请求路径
    6. * 2. {id} {name} 就是占位变量
    7. * 3. @PathVariable("name"): 这里name 和{name} 命名保持一致
    8. * 4. String name_ 这里自定义,故意这样写下
    9. * 5. @PathVariable Map map 把所有传递的值传入map
    10. * 6. 可以看下@PathVariable源码
    11. */
    12. @GetMapping("/monster/{id}/{name}")
    13. public String pathVariable(@PathVariable("id") Integer id,
    14. @PathVariable("name") String name,
    15. @PathVariable Map map) {
    16. System.out.println("id-" + id);
    17. System.out.println("name-" + name);
    18. System.out.println("map-" + map);
    19. return "success";
    20. }

    通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过

    2.2.演示@RequestHeader 使用

    1. /**
    2. * @RequestHeader("Host") 获取http请求头的 host信息
    3. * @RequestHeader Map header: 获取到http请求的所有信息
    4. *@RequestHeader("host") String host,将请求头中的变量值host映射到控制器参数host中
    5. */
    6. @GetMapping("/requestHeader")
    7. public String requestHeader(@RequestHeader("host") String host,
    8. @RequestHeader Map header,
    9. @RequestHeader("accept") String accept) {
    10. System.out.println("host-" + host);
    11. System.out.println("header-" + header);
    12. System.out.println("accept-" + accept);
    13. return "success";
    14. }

    @RequestHeader 是获取请求头中的数据,通过指定参数 value 的值来获取请求头中指定的参数值

    2.3演示@RequestParam 使用

    1. /**
    2. * 解读
    3. * 如果我们希望将所有的请求参数的值都获取到,可以通过
    4. *
    5. * @param username
    6. * @param fruits
    7. * @param paras
    8. * @return
    9. * @RequestParam Map paras 获取
    10. */
    11. @GetMapping("/hi")
    12. public String hi(@RequestParam(value = "name") String username,
    13. @RequestParam("fruit") List fruits,
    14. @RequestParam Map paras) {
    15. System.out.println("username-" + username);
    16. System.out.println("fruit-" + fruits);
    17. System.out.println("paras-" + paras);
    18. return "success";
    19. }

    将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)

    1. 语法:@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
    2. value:参数名
    3. required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
    4. defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值

    2.4演示@CookieValue 使用

    1. /**
    2. * 因为我的浏览器目前没有cookie,我们可以自己设置cookie[技巧还是非常有用]
    3. * 如果要测试,可以先写一个方法,在浏览器创建对应的cookie
    4. * 说明 1. value = "cookie_key" 表示接收名字为 cookie_key的cookie
    5. * 2. 如果浏览器携带来对应的cookie , 那么 后面的参数是String ,则接收到的是对应对value
    6. * 3. 后面的参数是Cookie ,则接收到的是封装好的对应的cookie
    7. */
    8. @GetMapping("/cookie")
    9. public String cookie(@CookieValue(value = "cookie_key", required = false) String cookie_value,
    10. HttpServletRequest request,
    11. @CookieValue(value = "username", required = false) Cookie cookie) {
    12. System.out.println("cookie_value-" + cookie_value);
    13. if (cookie != null) {
    14. System.out.println("username-" + cookie.getName() + "-" + cookie.getValue());
    15. }
    16. System.out.println("-------------------------");
    17. Cookie[] cookies = request.getCookies();
    18. for (Cookie cookie1 : cookies) {
    19. System.out.println(cookie1.getName() + "=>" + cookie1.getValue());
    20. }
    21. return "success";
    22. }

    @CookieValue的作用

      用来获取Cookie中的值

    @CookieValue参数

      1、value:参数名称

      2、required:是否必须,获取不到则为空

      3、defaultValue:默认值

    2.5演示@RequestBody 使用

    1. **
    2. * @RequestBody 是整体取出Post请求内容
    3. */
    4. @PostMapping("/save")
    5. public String postMethod(@RequestBody String content) {
    6. System.out.println("content-" + content);
    7. return "success";
    8. }

            @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);而最常用的使用请求体传参的无疑是POST请求了,所以使用@RequestBody接收数据时,一般都用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

    注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。

    2.6演示@RequestAttribute,SessionAttribute 使用

    1. @GetMapping("/login")
    2. public String login(HttpServletRequest request) {
    3. request.setAttribute("user", "hong~");//向request域中添加的数据
    4. request.getSession().setAttribute("website", "http://www.baidu.com"); //向session中添加数据
    5. return "forward:/ok"; //请求转发到 /ok
    6. }
    7. @GetMapping("/ok")
    8. @ResponseBody
    9. public String ok(
    10. HttpServletRequest request,
    11. @SessionAttribute(value = "website", required = false) String website,
    12. @RequestAttribute(value = "user", required = false) String username
    13. ) {
    14. //获取到request域中的数据
    15. System.out.println("username-" + username);
    16. System.out.println("通过servlet api 获取 username-" + request.getAttribute("user"));
    17. System.out.println("website-" + website);
    18. System.out.println("通过servlet api 获取 website-" + request.getSession().getAttribute("website"));
    19. return "success";
    20. }

    获取HTTP的请求(request)对象属性值,用来传递给控制器的参数。

    三.复杂参数

    1.基本介绍

    1. 在开发中,SpringBoot 在响应客户端请求时,也支持复杂参数
    2. Map、Model、Errors/BindingResult、RedirectAttributes、ServletResponse、SessionStatus、
    UriComponentsBuilder、ServletUriComponentsBuilder、HttpSession
    3. Map、Model 数据会被放在 request 域, 底层 request.setAttribute()
    4. RedirectAttributes 重定向携带数据

    2.复杂参数应用实例

    2.1说明 :

    演示复杂参数的使用,重点: Map、Model、ServletResponse

    2.2代码演示

    1. //响应一个注册请求
    2. @GetMapping("/register")
    3. public String register(Map map,
    4. Model model,
    5. HttpServletResponse response) {
    6. //如果一个注册请求,会将注册数据封装到map或者model
    7. //map中的数据和model的数据,会被放入到request域中
    8. map.put("user","hspedu");
    9. map.put("job","java架构师");
    10. model.addAttribute("sal", 80000);
    11. //一会我们再测试response使用
    12. //我们演示创建cookie,并通过response 添加到浏览器/客户端
    13. Cookie cookie = new Cookie("email", "hspedu@sohu.com");
    14. response.addCookie(cookie);
    15. //请求转发
    16. return "forward:/registerOk";
    17. }
    18. @ResponseBody
    19. @GetMapping("/registerOk")
    20. public String registerOk(HttpServletRequest request) {
    21. System.out.println("user-" + request.getAttribute("user"));
    22. System.out.println("job-" + request.getAttribute("job"));
    23. System.out.println("sal-" + request.getAttribute("sal"));
    24. return "success";
    25. }

    四.自定义对象参数-自动封装

    1.基本介绍

    1. 在开发中,SpringBoot 在响应客户端请求时,也支持自定义对象参数
    2. 完成自动类型转换与格式化
    3. 支持级联封装

    2.自定义对象参数-应用实例

    2.1需求说明 :

    演示自定义对象参数使用,完成自动封装,类型转换

    2.2代码实现

    save.html
    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>添加妖怪title>
    6. head>
    7. <body>
    8. <h1>添加妖怪-坐骑[测试封装POJO;]h1>
    9. <form action="/savemonster" method="post">
    10. 编号: <input name="id" value="100"><br/>
    11. 姓名: <input name="name" value="牛魔王"/> <br/>
    12. 年龄: <input name="age" value="500"/> <br/>
    13. 婚否: <input name="isMarried" value="true"/> <br/>
    14. 生日: <input name="birth" value="2000/11/11"/> <br/>
    15. 坐骑名称:<input name="car.name" value="法拉利"/><br/>
    16. 坐骑价格:<input name="car.price" value="9999.9"/>
    17. <input type="submit" value="保存"/>
    18. form>
    19. body>

    Car.java 

    1. @ToString
    2. @Data
    3. public class Car {
    4. private String name;
    5. private Double price;
    6. }

     Monster.java 

    1. @ToString
    2. @Data
    3. public class Monster {
    4. private Integer id;
    5. private String name;
    6. private Integer age;
    7. private Boolean isMarried;
    8. private Date birth;
    9. private Car car;
    10. }
    ParameterController.java 增加处理添加请求
    1. @PostMapping("/savemonster")
    2. public String saveMonster(Monster monster){
    3. System.out.println("monster= " + monster);
    4. return "success";
    5. }

    d2b3b58520114dfb8fa8138e22366d43.png

  • 相关阅读:
    三维地图开发平台-支持离线地图开发
    企业级优化
    uniapp微信小程序系列(2)pages.json实用配置详解
    【数据结构】单链表OJ题(一)
    Environment_Variable_and_SetUID
    判断 Mac显卡 mps 是否可以正常运行
    C++中悬垂指针(delete后指针)仍然可以访问所指内存的问题
    损失函数总结(六):KLDivLoss、BCEWithLogitsLoss
    SpringSecurity - 启动流程分析(四)
    php static延迟静态绑定
  • 原文地址:https://blog.csdn.net/weixin_54107527/article/details/128077252