You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot @RequestBody接收嵌套org.json.JSONObject字段为空怎么办

问题原因

Spring Boot 默认使用 Jackson 作为 HTTP 请求体的序列化/反序列化工具,Jackson 原生不支持org.json包下的JSONObject、JSONArray类型的映射逻辑,因此只能给对应字段初始化空对象,无法解析请求中对应的嵌套JSON内容。

解决方案

方案1:使用Jackson原生JsonNode类型(最推荐,无需额外配置)

直接修改请求实体类的jsonField字段类型为Jackson自带的com.fasterxml.jackson.databind.JsonNode,即可自动完成反序列化:

import com.fasterxml.jackson.databind.JsonNode;

public class Request {
    private String field1;
    private JsonNode jsonField;
}

如果后续业务需要使用org.json.JSONObject,可以通过如下代码转换:

org.json.JSONObject jsonObj = new org.json.JSONObject(jsonField.toString());

方案2:添加Jackson对org.json的适配依赖(保留JSONObject类型)

如果业务逻辑必须使用org.json.JSONObject作为字段类型,可以添加Jackson官方的org.json适配模块:

  1. 引入Maven依赖(Gradle可对应调整坐标)
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-json-org</artifactId>
</dependency>
  1. 注册适配模块到Jackson容器,添加如下配置类即可:
import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.fasterxml.jackson.databind.ObjectMapper;

@Configuration
public class JacksonConfig {
    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.registerModule(new JsonOrgModule());
        return objectMapper;
    }
}

配置完成后原有的JSONObject类型字段即可正常接收嵌套JSON内容。

方案3:使用Map接收未知结构JSON

也可以将jsonField字段定义为Map<String, Object>类型,Jackson原生支持Map类型的反序列化,无需额外配置就可以解析任意结构的嵌套JSON,后续可以根据业务需要自行转换为其他JSON对象类型。

内容的提问来源于stack exchange,提问作者Teofilo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 14:15:08