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

如何在Spring Boot中使用org.json.JSONObject作为接口返回类型?

解决Spring Boot中返回org.json.JSONObject的序列化问题

你遇到的问题核心在于Spring Boot默认的Jackson实例没有注册JsonOrgModule,导致无法正确序列化org.json.JSONObject对象,转而序列化了它的内部属性(比如empty字段)。下面是具体的解决方案:

1. 确认依赖版本对齐

首先确保你引入的jackson-datatype-json-org版本和Spring Boot自带的Jackson版本一致,避免版本冲突。比如Spring Boot 2.6.x对应Jackson 2.13.x,Spring Boot 3.x对应Jackson 2.15+,你当前的版本是匹配的,但如果后续升级框架,记得同步调整这个依赖的版本。

2. 全局注册JsonOrgModule到Spring的ObjectMapper

Spring Boot确实维护了一个全局的ObjectMapper实例,我们可以通过配置类让框架自动加载JsonOrgModule,有两种推荐方式:

方式一:使用Jackson2ObjectMapperBuilderCustomizer(推荐)

这是Spring Boot官方推荐的自定义Jackson配置的方式,它会自动融入框架的现有配置:

import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonJsonOrgConfig {

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jsonOrgModuleCustomizer() {
        return builder -> builder.modules(new JsonOrgModule());
    }
}

方式二:直接注册自定义ObjectMapper Bean

如果你需要更精细的控制,可以直接创建一个ObjectMapper Bean并注册模块:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JacksonJsonOrgConfig {

    @Bean
    public ObjectMapper objectMapper() {
        return new ObjectMapper()
                .registerModule(new JsonOrgModule());
    }
}

3. 验证效果

完成配置后,你的接口不需要修改返回类型(依然保留org.json.JSONObject),也不需要手动创建ObjectMapper,Spring Boot会自动使用已经注册了模块的全局实例来序列化返回值,现在接口应该能正确返回你构建的JSON内容,而不是{"empty":false}了。

补充说明

你之前手动创建ObjectMapper无效的原因是:Spring Boot在处理@ResponseBody时,使用的是它自己容器中管理的全局ObjectMapper实例,而你手动创建的那个并没有被框架使用,所以必须通过配置类将模块注册到框架的实例中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:22:37