当前位置: 首页 > ds >正文

Spring Boot 实现 POJO 级联封装复杂属性

目录

一、项目结构

二、代码实现

1. User.java

2. UserController.java

三、请求测试

控制台输出:

返回结果(JSON 响应):

四、总结


在 Web 开发中,我们经常会遇到前端提交的数据比较复杂,不仅包含简单属性(如用户名、密码),还包含数组、对象等嵌套结构。这时候就需要在 POJO 类中实现级联封装,让 Spring Boot 能自动帮我们映射参数。

本文通过一个简单示例:User 对象中包含基本属性、数组属性和对象属性,来演示如何实现复杂参数的封装。


一、项目结构

src└── main└── java└── org.gdcp├── pojo│    └── User.java└── controller└── UserController.java

二、代码实现

1. User.java

文件路径:org/gdcp/pojo/User.java

package org.gdcp.pojo;import lombok.Data;@Data
public class User {private String username;   // 用户名private String password;   // 密码private String[] likes;    // 爱好(数组)private Info info;         // 复杂属性:包含省市区信息
}@Data
class Info {private String shen;   // 省private String shi;    // 市private String qu;     // 区
}

这里我们定义了 User 实体类,其中包含:

  • 基本属性usernamepassword

  • 数组属性likes

  • 对象属性info

这样前端在传参时,Spring Boot 就可以自动将复杂参数映射到 User 对象。


2. UserController.java

文件路径:org/gdcp/controller/UserController.java

package org.gdcp.controller;import org.gdcp.pojo.User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@GetMapping("/login")public User add(User user){// 控制台打印对象System.out.println(user);// 返回给前端return user;}
}

这里我们提供了一个 /login 接口,接收 User 对象作为参数。Spring Boot 会根据请求参数自动封装成 User 实例。


三、请求测试

假设我们通过浏览器或 Postman 访问以下 URL:

http://localhost:8080/login?username=tom&password=123456&likes=java&likes=python&info.shen=广东&info.shi=广州&info.qu=天河

控制台输出:

User(username=tom, password=123456, likes=[java, python], info=Info(shen=广东, shi=广州, qu=天河))

返回结果(JSON 响应):

{"username": "tom","password": "123456","likes": ["java", "python"],"info": {"shen": "广东","shi": "广州","qu": "天河"}
}

四、总结

  • Spring Boot 中,请求参数名对象属性名 一致时,Spring 会自动封装。

  • 数组参数:直接用多值参数 likes=java&likes=python 即可。

  • 对象属性:使用 对象名.属性名 的形式,例如 info.shen=广东

  • 使用 @RestController + @GetMapping 就能快速实现接口测试。

通过这种方式,我们就能轻松实现 POJO 级联封装复杂属性,简化了参数接收和数据处理逻辑。

http://www.xdnf.cn/news/18690.html

相关文章:

  • React Hooks UseRef的用法
  • 高速CANFD收发器ASM1042在割草机器人轮毂电机通信系统中的适配性研究
  • 终结系统裸奔:Debian老旧版本安全加固终极指南
  • 梯度下降(线性回归为例)
  • 总结:Maven多仓库多镜像源配置
  • 【KO】前端面试五
  • MySQL存储过程详解
  • 【8位数取中间4位数】2022-10-23
  • 利用Prometheus监控服务器相关数据
  • 本地文件夹即时变身 Web 服务器(文件服务器)
  • 01数据结构-归并排序和计数排序
  • 用 Ansible 优雅部署 Kubernetes 1.33.3(RedHat 10)
  • 文件相关操作的函数和文件操作
  • AlexNet读取数据集 与VGG-11网络
  • 视频编码异常的表现
  • `strchr` 字符串查找函数
  • C++中的右值引用与通用引用:std::move与std::forward的正确使用 (Effective Modern C++ 条款25)
  • 《CF1245D Shichikuji and Power Grid》
  • 嵌入式学习 day57 驱动-驱动框架
  • 国产CANFD芯片技术特性与应用前景综述:以ASM1042系列为例
  • Java试题-选择题(14)
  • 番茄(西红柿)叶片病害检测数据集:12k+图像,10类,yolo标注
  • 2025-08-22 Python进阶10——魔术方法
  • 从原理到实践:朴素贝叶斯算法的魅力解析
  • 构建城市数字孪生底座:深度解析智慧城市全景视频拼接融合解决方案
  • ingress和service区别
  • 未来已来?AI 预测技术在气象、金融领域的应用现状与风险警示
  • python3GUI--Joy音乐播放器 在线播放器 播放器 By:PyQt5(附下载地址)
  • Java面试-== 和 equals() 方法的区别与实现原理
  • Unreal Engine UE_LOG