带你了解SpringBoot支持的复杂参数--自定义对象参数-自动封装

😀前言

本篇博文是关于SpringBoot 在响应客户端请求时支持的复杂参数和自定义对象参数,希望您能够喜欢😊

🏠个人主页:晨犀主页

🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰

如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊

文章目录

SpringBoot接收参数相关注解应用

复杂参数

基本介绍

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

复杂参数应用实例

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

代码实现

修改com/nlc/web/controller/RequestController.java

java 复制代码
@Controller
public class RequestController {

    @GetMapping("/login")
    public String login(HttpServletRequest request) {
        request.setAttribute("user", "顺顺~");//向request域中添加的数据
        request.getSession().setAttribute("website", "http://www.baidu.com"); //向session中添加数据
        return "forward:/ok";  //请求转发到  /ok
    }

    @GetMapping("/ok")
    @ResponseBody
    public String ok(
            HttpServletRequest request,
            @SessionAttribute(value = "website", required = false) String website,
            @RequestAttribute(value = "user", required = false) String username
    ) {
        //获取到request域中的数据
        System.out.println("username-" + username);
        System.out.println("通过servlet api 获取 username-" + request.getAttribute("user"));
        System.out.println("website-" + website);
        System.out.println("通过servlet api 获取 website-" + request.getSession().getAttribute("website"));
        return "success";
    }

    //响应一个注册请求
    @GetMapping("/register")
    public String register(Map<String,Object> map,
                           Model model,
                           HttpServletResponse response) {
        //如果一个注册请求,会将注册数据封装到map或者model
        //map中的数据和model的数据,会被放入到request域中
        map.put("user","nlc");
        map.put("job","java架构师");
        model.addAttribute("sal", 80000);
        //一会我们再测试response使用
        //我们演示创建cookie,并通过response 添加到浏览器/客户端
        Cookie cookie = new Cookie("email", "www@my.com");
        response.addCookie(cookie);

        //请求转发
        return "forward:/registerOk";
    }

    @ResponseBody
    @GetMapping("/registerOk")
    public String registerOk(HttpServletRequest request) {

        System.out.println("user-" + request.getAttribute("user"));
        System.out.println("job-" + request.getAttribute("job"));
        System.out.println("sal-" + request.getAttribute("sal"));

        return "success";
    }
}

测试:

浏览器http://localhost:8080/register

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

基本介绍

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

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

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

代码实现

  1. 创建public/save.html
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加妖怪</title>
</head>
<body>
<h1>添加妖怪-坐骑[测试封装POJO;]</h1>
<form action="/savemonster" method="post">
    编号: <input name="id" value="100"><br/>
    姓名: <input name="name" value="牛魔王"/> <br/>
    年龄: <input name="age" value="500"/> <br/>
    婚否: <input name="isMarried" value="true"/> <br/>
    生日: <input name="birth" value="2000/11/11"/> <br/>
    坐骑:<input name="car.name" value="奔驰"/><br/>
	价格:<input name="car.price" value="99999.9"/>
    <input type="submit" value="保存"/>
</form>
</body>
</html>
  1. 创建com\nlc\web\bean\Car.java
java 复制代码
@ToString
@Data
public class Car {
    private String name;
    private Double price;
}
  1. 创建com\nlc\web\bean\Monster.java
java 复制代码
@Data
public class Monster {
    private Integer id;
    private String name;
    private Integer age;
    private Boolean isMarried;
    private Date birth;
    private Car car;
}
  1. 修改com/nlc/web/controller/ParameterController.java 增加处理添加请求
java 复制代码
 @PostMapping("/savemonster")
    public String saveMonster(Monster monster) {
        System.out.println("monster-" + monster);
        return "success";
    }

测试

完成测试, 浏览器http://localhost:8080/save.html


在开发过程中日期格式不用太在意,我们只要保证用户界面和DB是需要的格式就够了。

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁

希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻

如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

相关推荐
程序员爱钓鱼4 分钟前
Go语言实战案例-开发一个Markdown转HTML工具
前端·后端·go
小小菜鸡ing19 分钟前
pymysql
java·服务器·数据库
getapi22 分钟前
shareId 的产生与传递链路
java
桦说编程32 分钟前
爆赞!完全认同!《软件设计的哲学》这本书深得我心
后端
thinktik42 分钟前
还在手把手教AI写代码么? 让你的AWS Kiro AI IDE直接读飞书需求文档给你打工吧!
后端·serverless·aws
我没想到原来他们都是一堆坏人1 小时前
(未完待续...)如何编写一个用于构建python web项目镜像的dockerfile文件
java·前端·python
沙二原住民1 小时前
提升数据库性能的秘密武器:深入解析慢查询、连接池与Druid监控
java·数据库·oracle
上官浩仁1 小时前
springboot redisson 缓存入门与实战
spring boot·redis·缓存
小小工匠2 小时前
SpringBoot - Spring 资源加载全解析:ResourceLoader 与 ResourceUtils 的正确打开方式
spring boot·spring·resourceloader·resourcutils