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
实体类,其中包含:
-
基本属性:
username
、password
-
数组属性:
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 级联封装复杂属性,简化了参数接收和数据处理逻辑。