Spring无法在Maven中存在Jackson的情况下转换JSON
Posted
技术标签:
【中文标题】Spring无法在Maven中存在Jackson的情况下转换JSON【英文标题】:Spring unable to convert JSON with Jackson present in maven 【发布时间】:2018-09-05 00:14:27 【问题描述】:我在 Java Spring 中返回 JSONObject 时遇到问题。我一直在疯狂地搜索,但还没有找到解决方案。
我正在使用 Jackson 的 fasterxml,但我仍然无法让我的 API 以 JSON 格式响应。我将包含我认为有必要提供帮助的文件。
首先,我将展示我的 pom.xml,我认为错误的来源。 Jackson 和另一个依赖项之间可能存在冲突,但我似乎无法弄清楚是哪一个。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-
8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
<version>0.0.20131108.vaadin1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
发生错误的控制器如下所示。你应该看看 testMeth2()
@RestController
@RequestMapping(path="/test")
@EnableWebMvc
public class TestController
@Autowired
private CourseRecommendation courseRecommendation;
@Autowired
private EmployeesRepository employeesRepository;
Employees emp;
@RequestMapping(value = "/check/1", method = RequestMethod.GET)
public @ResponseBody
Employees testMeth1()
emp = employeesRepository.findById(1);
emp.setSex("F");
employeesRepository.save(emp);
return emp;
;
@RequestMapping(value = "/check/2", method = RequestMethod.GET)
public @ResponseBody
JSONObject testMeth2()
return new JSONObject();
我将在 pastebin 中也包含堆栈跟踪:
https://pastebin.com/5BsEk9C7
这是我正在做的一个实习项目,我们将不胜感激每一点帮助!
干杯。
【问题讨论】:
是否有理由将 Jackson 版本号放入而不是从 spring-boot-parent 继承?可能会弄乱 Jackson 的 AutoConfig 也测试 Meth (lolz) - 我宁愿不.. :) @FattySalami 我都试过了,不过我会改变它:) 从我看到的情况来看,JSONObject 类似乎没有针对某些字段的 getter,因此 Jackson 实际上无法转换它。 ***.com/a/44842806/7770917 【参考方案1】:我最终只使用了一个 POJO,Spring 为我将它转换为 JSON。这不一样,但它对我的项目来说是一个很好的解决方法。
干杯!
【讨论】:
以上是关于Spring无法在Maven中存在Jackson的情况下转换JSON的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 2.3 中带有 Maven 的 Jackson 版本
带有war文件的Maven上的Spring-boot jackson错误,但不是带有com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrd
在 Spring MVC 中,无法使用 Jackson @JsonFormat 将输入绑定到日期字段
Spring Boot:Jackson 不会从“application.properties”中获取配置