本文介绍了如何在 Spring Boot 应用中接收和处理包含动态字段的 JSON 对象,重点讲解了使用 Jackson 库的 JsonNode 类来解析和操作 JSON 数据,避免了预定义固定结构的实体类带来的限制,从而实现更灵活的数据处理方式。通过示例代码,展示了如何接收 JSON 请求并将其转换为 JsonNode 对象,并进行后续处理。
在实际的 API 开发中,我们经常会遇到接收到的 JSON 数据结构不固定,或者包含未知字段的情

使用 JsonNode 接收 JSON 请求
以下示例展示了如何在 Spring Boot 控制器中使用 JsonNode 接收 JSON 请求:
package com.example.demo.controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.fasterxml.jackson.databind.JsonNode;
@RestController
public class DemoController {
@RequestMapping(value="/ping",method = RequestMethod.POST)
public JsonNode index(@RequestBody JsonNode jsonNode) {
System.out.println("Received JSON:"+jsonNode.toString());
return jsonNode;
}
}在这个例子中,@RequestBody JsonNode jsonNode 注解告诉 Spring 将接收到的 JSON 请求体转换为 JsonNode 对象。 jsonNode.toString() 方法可以将 JsonNode 对象转换为字符串进行打印或记录。
处理 JsonNode 对象
接收到 JsonNode 对象后,我们可以使用 Jackson 提供的 API 来访问和操作 JSON 数据的各个部分。例如,获取 "Person" 对象的 "name" 字段:
@RestController
public class DemoController {
@RequestMapping(value="/ping",method = RequestMethod.POST)
public JsonNode index(@RequestBody JsonNode jsonNode) {
JsonNode personNode = jsonNode.get("Person");
if (personNode != null) {
JsonNode nameNode = personNode.get("name");
if (nameNode != null) {
String name = nameNode.asText();
System.out.println("Person Name: " + name);
}
}
return jsonNode;
}
}这段代码首先通过 jsonNode.get("Person") 获取 "Person" 对象,然后通过 personNode.get("name") 获取 "name" 字段的值。asText() 方法将 JsonNode 对象转换为字符串。
注意事项
-
依赖引入: 确保你的 Spring Boot 项目中引入了 Jackson 依赖。通常 Spring Boot 会自动包含 Jackson,但如果遇到问题,可以在 pom.xml 文件中显式添加:
com.fasterxml.jackson.core jackson-databind 空值处理: 在访问 JsonNode 的字段时,需要注意处理空值情况,避免出现 NullPointerException。可以使用 if (node != null) 进行判断。
类型转换: JsonNode 提供了多种类型转换方法,例如 asInt()、asBoolean() 等,根据实际需求选择合适的方法。
总结
使用 JsonNode 可以方便地处理包含动态字段的 JSON 数据,避免了预定义固定结构的 Java Bean 带来的限制。通过 Jackson 提供的 API,我们可以灵活地访问和操作 JSON 数据的各个部分。在实际开发中,可以根据具体需求选择合适的方式来处理 JSON 数据。








