带你了解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连支持一下,创造不易您们的支持是我的动力🤞

相关推荐
Magic--11 分钟前
深入解析管道:最基础的进程间通信(IPC)实现
java·服务器·unix
JOEH6018 分钟前
Java 后端开发中的内存泄漏问题:90% 开发者都会踩的 5 个坑
后端
_野猪佩奇_牛马版19 分钟前
多智能体协作 - 使用 LangGraph 子图实现
后端
JOEH6019 分钟前
为什么你的数据库连接总超时?99% 的 Java 程序员都踩过这 5 个坑
后端
后端不背锅21 分钟前
对外接口设计完全指南:安全、高性能、可演进
后端
IT小崔36 分钟前
SqlSugar 使用教程
数据库·后端
Oneslide38 分钟前
Docker Compose 重启 RabbitMQ 数据丢失?
后端
架构师沉默39 分钟前
为什么国外程序员都写独立博客,而国内都在公众号?
java·后端·架构
开心就好202543 分钟前
Win11 抓包工具怎么选?网页请求与设备流量抓取
后端·ios
带刺的坐椅1 小时前
SolonCode v2026.4.1 发布(比 ClaudeCode 简约的编程智能体)
java·ai·llm·agent·solon-ai·claudecode·soloncode