Spring Boot中使用org.json.JSONObject转POJO为JSON报错求助
问题排查方案
1. 先解决报错与代码的不一致矛盾
报错提示Cannot resolve constructor 'JSONObject(Order)',但你提供的测试代码里明明使用的是Person类,先排查以下几点:
- 检查测试类
Test.java是否实际导入了Order类而非Person,或是代码里误写为Order person = new Order()? - 确认
Person类的实际类名是否被修改为Order,但贴代码时写错了? - 清理IDE缓存(比如IntelliJ的
File -> Invalidate Caches...)后重新编译项目,排除缓存导致的识别错误。
2. 确认org.json依赖是否正确引入
Spring Boot默认集成Jackson作为JSON处理库,若要使用org.json.JSONObject,需确保依赖已正确添加到项目配置中:
Maven依赖(pom.xml)
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20240303</version> <!-- 使用最新稳定版 --> </dependency>
Gradle依赖(build.gradle)
implementation 'org.json:json:20240303'
若依赖未添加或版本过低,会导致找不到支持POJO的构造函数。
3. 验证Person类结构是否符合要求
org.json.JSONObject通过反射读取POJO的getter方法生成JSON,你的Person类已满足基础要求:
- 是public修饰的类
- 拥有public无参构造函数(Java默认提供,因未定义其他构造函数)
- 所有属性都对应public的getter方法
若后续仍有问题,可显式添加无参构造函数尝试:
public Person() {}
4. 排除Spring Boot依赖冲突
Spring Boot的spring-boot-starter-web等依赖可能间接引入其他JSON库,需检查项目依赖树,确保org.json包未被排除或版本被覆盖:
- Maven:执行
mvn dependency:tree查看依赖关系 - Gradle:执行
./gradlew dependencies查看依赖关系
若存在冲突,可在依赖中排除其他JSON库,或指定org.json的版本优先级。
内容的提问来源于stack exchange,提问作者Kim Gordon
相关产品推荐
相关产品推荐

