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

相关推荐
北i几秒前
TiDB 关联子查询去关联优化实战案例与原理深度解析
java·数据库·sql·tidb
Kuo-Teng1 分钟前
LeetCode 21: Merge Two Sorted Lists
java·算法·leetcode·链表·职场和发展
我命由我123457 分钟前
Java 开发 - 粘包处理器 - 基于消息头 + 消息体(魔数验证、长度验证)
java·网络·后端·网络协议·java-ee·intellij-idea·intellij idea
2301_8003997213 分钟前
stm32 printf重定向到USART
java·stm32·算法
csdn_wuwt16 分钟前
有C#可用的开源的地图吗?
后端·c#·gis·map·开发·设计·地图
bagadesu17 分钟前
15.<Spring Boot 日志>
java·后端
laplace012326 分钟前
Maven
java·maven
wdfk_prog27 分钟前
Xshell终端连接Ubuntu/Debian无颜色的解决方案
java·ubuntu·debian
9ilk35 分钟前
【基于one-loop-per-thread的高并发服务器】--- 项目测试
运维·服务器·c++·后端·中间件
艾迪的技术之路1 小时前
linux上gitlab runner部署文档
java·github