JAX-RS接收JSON并打印至控制台:多值JSON接收方案咨询
处理多值类型JSON数据的接收方案
嘿,看你已经成功搞定单个Person对象的JSON接收和打印了,要扩展到多值类型其实很简单,我给你梳理几种最常见的场景,一步步来:
1. 直接接收多个Person的列表(最常用场景)
如果你的需求是一次性接收一批用户数据,直接把接口参数改成List<Person>就行:
步骤1:修改Controller接口
@PostMapping("/batch-persons") public void receivePersonList(@RequestBody List<Person> personList) { // 直接打印整个列表,因为Person有toString,会自动遍历输出每个元素 System.out.println("Received persons: " + personList); // 也可以循环逐个打印 for (Person person : personList) { System.out.println("Person: " + person); } }
步骤2:Postman发送请求
请求体传JSON数组格式:
[ {"name":"Mickey","surname":"Mouse"}, {"name":"Donald","surname":"Duck"}, {"name":"Goofy","surname":"Dog"} ]
记得把请求的Content-Type设为application/json。
控制台输出示例
Received persons: [Person [name=Mickey, surname=Mouse], Person [name=Donald, surname=Duck], Person [name=Goofy, surname=Dog]] Person: Person [name=Mickey, surname=Mouse] Person: Person [name=Donald, surname=Duck] Person: Person [name=Goofy, surname=Dog]
2. 接收包含多值的复杂请求体(比如混合单个对象+列表)
如果你的请求不仅有用户列表,还有其他参数(比如批次ID、备注),可以创建一个DTO类来封装所有字段:
步骤1:创建DTO类
public class PersonBatchRequest { private String batchId; private List<Person> persons; private String remark; // 生成getter、setter方法 // 生成toString方法(和你的Person类一样,方便打印) // 如果你用Lombok,直接加@Data注解就能自动生成这些方法 }
步骤2:修改Controller接口
@PostMapping("/complex-batch") public void receiveComplexRequest(@RequestBody PersonBatchRequest batchRequest) { System.out.println("Received complex request: " + batchRequest); }
步骤3:Postman发送请求
请求体传嵌套JSON:
{ "batchId": "BATCH_20240520", "remark": "这是一批测试用户", "persons": [ {"name":"Mickey","surname":"Mouse"}, {"name":"Donald","surname":"Duck"} ] }
控制台输出示例
Received complex request: PersonBatchRequest [batchId=BATCH_20240520, persons=[Person [name=Mickey, surname=Mouse], Person [name=Donald, surname=Duck]], remark=这是一批测试用户]
3. 接收键值对类型的多值(比如按别名存储用户)
如果需要接收类似{ "别名": 用户对象 }的键值对结构,可以用Map<String, Person>作为参数:
步骤1:修改Controller接口
@PostMapping("/person-map") public void receivePersonMap(@RequestBody Map<String, Person> personMap) { System.out.println("Received person map: " + personMap); }
步骤2:Postman发送请求
请求体传键值对JSON:
{ "mouse": {"name":"Mickey","surname":"Mouse"}, "duck": {"name":"Donald","surname":"Duck"} }
控制台输出示例
Received person map: {mouse=Person [name=Mickey, surname=Mouse], duck=Person [name=Donald, surname=Duck]}
几个关键注意点
- 确保你的项目已经集成了JSON解析器(Spring Boot默认用Jackson,无需额外配置;如果是传统Spring项目,要确保Jackson相关依赖已引入)
- 所有实体类/DTO都要有getter、setter方法(不然JSON解析器无法赋值),以及
toString方法(方便你打印查看) - Postman请求必须设置
Content-Type: application/json,不然后端无法识别JSON格式
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

