jackson 相关问题

Jackson是一个Java库,用于处理读取和写入(解析/生成)以及与Java对象之间的数据绑定等任务。虽然Jackson主要用于JSON,但它还支持许多其他数据格式,如Avro,CBOR,CSV,Java Properties,Protobuf,Smile,XML和YAML。

Jackson - 使用 JsonNode 类型时,对象未保存为基本 JSON

我正在使用 Spring Boot (Kotlin) 和 Mongo 将一些数据保存到我的数据库中。 我将 Mongo 的集合定义如下: @Document(集合 = "事件") 数据类事件( 有效 ID:字符串, 瓦尔帕...

回答 1 投票 0

使用 Jackson 将 CSV 解析为具有嵌套 POJO 字段的 POJO

不重复:如何使用 Jackson 序列化对象的嵌套集合 有人在 49 秒内发表评论后,我的问题立即被关闭,所以请不要连续机器人关闭

回答 1 投票 0

为什么记录类不能用Jackson正确反序列化?

我正在为我的电报频道开发简单的机器人,并且我正在使用 Java 16 功能,例如记录类。问题是我无法将传入请求反序列化到记录类中。我正在使用杰克逊...

回答 3 投票 0

Spring Boot - 自定义 JsonDeserializer 被忽略

我正在尝试将自定义 Jackson 反序列化器(类“com.fasterxml.jackson.databind.JsonDeserializer”)应用到需要自定义反序列化的第三方库中的 bean。我的...

回答 2 投票 0

如何在 springdoc-openapi 中拥有真正的应用程序生成的响应模式?

我有一个 Spring Boot 项目,使用 springdoc-openapi-starter-webmvc-ui 创建 openapi 规范并显示 Swagger UI。该项目还使用 Jackson 以 JSON 格式序列化数据。杰克...

回答 1 投票 0

如何在序列化过程中跳过某些类型的字段?

我有一个 Spring AOP 服务,它拦截许多不同的第三方控制器端点。我的服务运行一个端点,获取结果 DTO,使用 ObjectMapper 将 DTO 序列化为 json,发送 j...

回答 1 投票 0

使用 writeValueAsString 序列化对象后,Jackson 反序列化失败

使用 com.fasterxml.jackson.databind.ObjectMapper 类(com.fasterxml.jackson.core:jackson-databind:2.9.5) 我试图反序列化以下类的对象: 类我的类{ 强...

回答 5 投票 0

Spring Boot 将 JSON 数据解析为具有不同字段名称的 Java 类

我是 Spring Boot 新手,我正在尝试弄清楚如何解析 json 数据。我看到很多关于如何将 json 字符串对象映射到带注释的 Java 类以及使用对象映射器的教程,例如...

回答 2 投票 0

Jackson 一直使用基类来反序列化 Java 泛型基类中的对象

标题 Jackson 未能反序列化 Java 泛型基类中的对象。 问题描述 我想将 JSON 反序列化为 Java 通用基类中的对象,但出现异常: ClassCastExc...

回答 1 投票 0

无法反序列化实例,超出 START_ARRAY 令牌

我需要向网络服务发送发布请求,但它返回以下异常 java.io.IOException:服务器返回 HTTP 响应代码:URL domain.com 为 500 实际的服务器响应如下

回答 1 投票 0

如何让jsonIgnore能够setvalue

Spring Boot 2.7.8 我有一个简单的 POJO,称为参与者。前端发送一个带有我想要存储在数据库中的字段 IP 的 API 请求。然而在后端我将此字段设置为 nu...

回答 1 投票 0

使用 Gson 或 Jackson 反序列化 JSON 时忽略空字段

我知道在将对象序列化为 JSON 时存在很多关于跳过具有空值的字段的问题。 我想在将 JSON 反序列化为对象时跳过/忽略具有空值的字段。

回答 4 投票 0

Spring REST 服务:如何配置以删除 json 响应中的空对象

我有一个返回 json 响应的 Spring Web 服务。我使用此处给出的示例来创建服务: http://www.mkyong.com/spring-mvc/spring-3-mvc-and-json-example/ json 格式...

回答 11 投票 0

如何使用 jackson fastxml 克隆经过一些修改的 json 内容

假设我们创建一个 json 作为像这样构造的字符串; StringWriter writer = new StringWriter(); 最终 JsonGenerator json = mapper.getFactory().createJsonGenerator(writer); // 构造 co...

回答 1 投票 0

搜索 JSON 响应以查找并反序列化 JSON 对象

我正在尝试使用 Jackson objectMapper 反序列化 JSON 对象。我遇到的问题是这个目标对象可以包装在各种其他 JSON 中,包括一些但不是全部 fi...

回答 1 投票 0

Spring boot ClassCastException 到 Jackson

我使用 MongoDB 制作简单的 Spring Boot 应用程序,并在我的控制器类中面临这个问题: org.springframework.beans.factory.BeanCreationException:创建名为“userController”的bean时出错 原因...

回答 1 投票 0

Spring openprojects + jackson:即使@Value抛出异常,也可以编写JsonType注释

项目 我正在使用带有设置类型名称的注释的开放投影。影响是一个递归接口,它将属性影响添加到所有具有影响的对象。 我只是复制了...

回答 1 投票 0

Java 8 Time API 的 ObjectMapper 配置

我们正在从 Joda 迁移到 Java Time。目前我们在实体中使用 Joda 的 DateTime。 AFAIK DateTime 相当于 Java 中的两种类型:OffsetDateTime 和 ZonedDateTime。既然我们要去...

回答 4 投票 0

Jackson:仅序列化标记的字段

我正在尝试做一些在 gson 中非常简单的事情。自从我改用 Jackson 作为序列化器后,我不知道如何实现它: 我只想序列化已被标记的字段...

回答 4 投票 0

Spring API 返回 XML 而不是 JSON

我有两个 Spring Boot 项目 - A(带有 API 的主要较大项目)和 B(由 A 作为 pom.xml 中的依赖项导入的库) 项目B的pom.xml: 我有两个 Spring Boot 项目 - A(带有 API 的主要较大项目)和 B(由 A 作为 pom.xml 中的依赖项导入的库) 项目B的pom.xml: <?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.b.root</groupId> <artifactId>b</artifactId> <version>0.0.1</version> <packaging>jar</packaging> <name>b</name> <description>Importable Jar</description> <properties> <java.version>11</java.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <oauth2.version>2.1.1.RELEASE</oauth2.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> <!-- Removing dependency for the embedded Tomcat --> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> <!-- End --> </exclusions> </dependency> <!-- asynchronous loggers --> <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.4.2</version> </dependency> <!-- Actuator --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- end --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <exclusions> <exclusion> <groupId>org.skyscreamer</groupId> <artifactId>jsonassert</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.security.oauth.boot</groupId> <artifactId>spring-security-oauth2-autoconfigure</artifactId> <version>${oauth2.version}</version> </dependency> <!-- docusign dependencies --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.6</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.9.8</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.1.1</version> <executions> <execution> <goals> <goal>jar</goal> </goals> <phase>package</phase> <configuration> <!--to be imported on other projects--> <classifier>b-classifier</classifier> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <skipTests>false</skipTests> <testFailureIgnore>true</testFailureIgnore> <forkMode>once</forkMode> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <forceJavacCompilerUse>true</forceJavacCompilerUse> <source>11</source> <target>11</target> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/java</directory> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> </resource> <resource> <directory>src/test/java</directory> <filtering>false</filtering> </resource> </resources> </build> </project> 项目A的pom.xml: <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.a.root</groupId> <artifactId>a</artifactId> <version>0.0.1-SNAPSHOT</version> <name>a</name> <description>Project A</description> <properties> <java.version>11</java.version> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <!-- Springboot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- JUnit --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <!-- PostgreSQL --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.5</version> </dependency> <!-- https://mvnrepository.com/artifact/org.openapitools/jackson-databind-nullable --> <dependency> <groupId>org.openapitools</groupId> <artifactId>jackson-databind-nullable</artifactId> <version>0.2.1</version> </dependency> <!-- https://mvnrepository.com/artifact/ch.qos.logback.contrib/logback-json-classic --> <dependency> <groupId>ch.qos.logback.contrib</groupId> <artifactId>logback-json-classic</artifactId> <version>0.1.5</version> </dependency> <!-- https://mvnrepository.com/artifact/ch.qos.logback.contrib/logback-jackson --> <dependency> <groupId>ch.qos.logback.contrib</groupId> <artifactId>logback-jackson</artifactId> <version>0.1.5</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>org.everit.json</groupId> <artifactId>org.everit.json.schema</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.3.1.Final</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.3.1.Final</version> </dependency> <dependency> <groupId>com.nimbusds</groupId> <artifactId>nimbus-jose-jwt</artifactId> <version>9.0.1</version> </dependency> <dependency> <groupId>org.passay</groupId> <artifactId>passay</artifactId> <version>1.6.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <!-- Importing library b --> <dependency> <groupId>com.b.root</groupId> <artifactId>b</artifactId> <version>0.0.1</version> <classifier>b-classifier</classifier> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 项目A中有返回JSON对象的API。但在集成测试中,它们以 XML 格式返回数据,导致它们失败。仅当在 A 中使用库 B 时才会发生这种情况。如果我们从 A 中删除 B,那么所有测试都会通过。 这是错误消息: org.json.JSONException: Unparsable JSON string: <ResponseDTO>.....</ResponseDTO> 我的猜测是两个项目的依赖关系存在某种冲突。但无法准确指出哪个依赖项。 我的猜测是,由于 spring 使用 jackson 将返回对象转换为 json 并且项目 B 中存在依赖项,因此它可能与此库具体有关: <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.9.8</version> </dependency> 但我无法理解这会产生什么影响。如果需要更多信息,请告诉我。 编辑1:添加控制器代码: TestDTO.java @Data // lombok annotation public class TestDTO { @JsonProperty(value = "id") @JsonSetter(nulls = Nulls.AS_EMPTY) private String id; @JsonProperty(value = "name") @JsonSetter(nulls = Nulls.AS_EMPTY) private String name; } TestController.java @RestController public class TestController { @Autowired private final TestService testService; @GetMapping("/test/:id") public TestDTO get(@PathVariable String id) { return testService.get(id); } } **编辑2:**添加了请求响应标头 请求 HTTP Method = GET Request URI = /test/1 Parameters = {} Headers = [Content-Type:"application/json", Content-Length:"616"] Body = <no character encoding set> Session Attrs = {} 回复 Status = 200 Error message = null Headers = [Content-Type:"application/xml;charset=UTF-8"] Content type = application/xml;charset=UTF-8 Body = <TestDTO>...</TestDTO> 可能是这样,因为 Spring Boot 通过依赖项 B 获取 xml 解析库。 我可以在映射中定义 Produce 属性,或者配置 WebMvcConfigurer 将 json 设置为默认类型。 为此,请在某处添加 WebMvcConfigurer。即使依赖 B 也应该没问题,如果它运行在同一个 Spring 上下文中。这是针对 Spring Boot 2.4.2 的: @Bean public WebMvcConfigurer customConfigurer() { return new WebMvcConfigurer() { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.defaultContentType(MediaType.APPLICATION_JSON); } }; } 我已经删除了以下依赖项 <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.9.8</version> </dependency> 从我的项目开始,它就可以工作了。我想如果我们添加这个依赖项 spring 会自动将 repose 转换为 xml

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.