jackson 相关问题

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

Jackson,使用私有字段和没有注释的 arg-constructor 反序列化类

可以使用 Jackson 反序列化为具有私有字段和自定义参数构造函数的类,而不使用注释和修改类吗? 我知道这在杰克身上是可能的...

回答 5 投票 0

使用 Java HTTP 客户端向 Grizzly HTTP 服务器发出 POST 请求超时

我正在将我们的项目升级到Java21,在这里我遇到了我们的grizzly http服务器与Java21不兼容(使用版本3.0.1)。因此我升级到了 3.0.16,至少...

回答 1 投票 0

杰克逊处理问题

我已经为此烦恼了好几天了。 我不明白发生了什么事。 我正在使用 GWT 开发一个 Web 应用程序,它使用 RestAPI 与不同的服务器进行通信。 我用杰尔...

回答 2 投票 0

Jackson 在 Vertx 中解析时吞下空的 JSON 对象

vertxVersion=4.5.11的Vert.x-Web“控制器”中的代码 var mapper = DatabindCodec.mapper(); mapper.configure( SerializationFeature.FAIL_ON_EMPTY_BEANS, false ); 映射器.配置(

回答 1 投票 0

使用shadowJar和jackson-core时发生“org.gradle.api.GradleException:无法添加zip条目”

我使用shadowJar打包kotlin程序时,出现“Could not add zip”问题。 build.gradle.kts 如图所示。 导入 org.jetbrains.kotlin.gradle.tasks.KotlinCompile 插件...

回答 1 投票 0

使用 Maven Shade 插件的 Apache Spark 项目中的 Jackson Databind 冲突

我正在开发一个使用 Apache Spark 处理 IMDb 数据的项目。我的设置涉及 Spark Core 和 Spark SQL 依赖项,以及用于处理 JSON 序列化和反序列化的 Jackson...

回答 1 投票 0

Jackson 无法使用 @get:JsonProperty 反序列化某些值

当我尝试反序列化下面的代码时 导入 com.fasterxml.jackson.annotation.JsonProperty 导入 com.fasterxml.jackson.module.kotlin.jacksonObjectMapper 有趣的主(){ val 对象映射器 =

回答 1 投票 0

在 Kotlin 中获取 jackson @JsonProperty 注解的值

我正在尝试提取 Kotlin 中 @JsonProperty 注释的值。该注释来自 com.fasterxml.jackson.core 依赖项(版本 2.18.1)。 以前,我使用过 @SerializedName

回答 1 投票 0

在scala中解析JSON并获取默认值

从文件读取的示例 JSON: { "类别": "[{\"a\":3,\"b\":11,\"c\":86}]", "ids": "[\"1234\", \"5678\"]"...

回答 1 投票 0

如何在 spring-boot 配置属性中使用可选值?

使用 spring-boot v3.2.5 我有反序列化到此类的配置: @盖特 // 有意验证而不是 jakarata.validation.Valid 因为 Valid 不会触发 // 验证

回答 1 投票 0

无法反序列化 BlueSky Feed JSON

我正在尝试用Java编写一个BlueSky客户端。 事实证明 Jackson 很难解析 feed URL 提供的 JSON。 我在尝试 ObjectMapper.readValue(...) 时收到此错误。 例外情况...

回答 1 投票 0

@JsonUnwrapped 使用泛型继承

我尝试了一切,但我仍然坚持这一点。 我使用 Jackson 注释 @JsonUnwrapped 来展平我的请求,同时使用继承和泛型类型。 事实是我...

回答 1 投票 0

jackson xml 节点,其属性为 json

当尝试使用 jackson 2.12.7(XMLMapper 和 ObjectMapper)将 xml 转换为 json 时,带有属性的元素出现问题。 JsonNode 节点 = xmlMapper.readTree(xml); 字符串 json = objectMapper.

回答 1 投票 0

如何仅针对单个端点使用特定格式的元素序列化 EnumSet?

假设我有一个简单的枚举: 公共枚举 Foo { CONST1("Const1 描述"), CONST2("Const2 描述"); 私有最终字符串标签; 私人 Foo(字符串标签) {

回答 1 投票 0

停止在其父项目(外部库)中下载依赖项 jar

以下是我的项目结构 项目A -C1项目 --模块A1 --B1模块 -C2项目 --模块A2 --B2模块 -家长 在 A1 POM 中,我有 jackson 外部库的依赖项。 在 C1 POM 中,我...

回答 1 投票 0

停止在另一个依赖项目级别(外部库)下载依赖项 jar

以下是我的项目结构 项目A -C1项目 --模块A1 --B1模块 -C2项目 --模块A2 --B2模块 -家长 在 A1 POM 中,我有 jackson 外部库的依赖项。 在 C1 POM 中,我...

回答 1 投票 0

如何将Java对象放入Jackson中的ObjectNode?

我正在以编程方式编写 ObjectNode,并使用 put(String propertyName...) 方法填充它的字段。现在我想添加一个子对象,它已经以 Java 对象的形式存在。怎么...

回答 3 投票 0

Spring Boot:请求和响应的不同 ObjectMapper 实例

我的 Spring Boot 应用程序中有以下控制器: @RequestMapping(方法 = RequestMethod.POST) 公共 ResponseEntity 流程(@RequestBody RequestDto 我的 Spring Boot 应用程序中有以下控制器: @RequestMapping(method = RequestMethod.POST) public ResponseEntity<ResponseDto<MyClass> process(@RequestBody RequestDto<MyClass> request){ return null; } MyClass有一个字段,比方说“myField”,我想要为该字段的请求和响应使用不同的NamingStrategy配置(这是因为我不想只为一个字段创建一个新类)。我已配置 ObjectMapper 实例如下: @Bean public ObjectMapper objectMapper(){ ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setPropertyNamingStrategy(namingStrategy); return objectMapper; } 这将用于请求和响应(即反序列化和序列化),在 Spring Boot 中是否有任何方法可以指示控制器使用不同的 ObjectMapper 实例? 您可以通过内容协商来解决。首先,定义您的自定义HttpMessageConverter。在下面的示例中,我定义了一个自定义转换器,当请求 Content-Type 标头设置为 application/test+json: 时应用该转换器 @Bean public HttpMessageConverters customConverters() { final AbstractJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(new ObjectMapper()); converter.setSupportedMediaTypes(Collections.singletonList(MediaType.valueOf("application/test+json"))); return new HttpMessageConverters(true, Collections.singletonList(converter)); } 为了简单起见,我使用了新创建的 ObjectMapper - 在您的情况下,您必须在此处传递之前配置的对象。 接下来的事情是告诉您的操作仅接受 appliction/test+json 请求(请记住,从现在开始,它需要 Content-Type:application/test+json 标头出现在对此端点的每个请求中): @RequestMapping(method = RequestMethod.POST, consumes = "application/test+json") public ResponseEntity<ResponseDto<MyClass> process(@RequestBody RequestDto<MyClass> request){ return null; } 最后一件事是确保当您调用此端点时,已设置 Content-Type:application/test+json 标头。当然,您可以使用任何其他名称来表示所需的内容类型,所提供的名称只是一个示例。 您可以在 ObjectMapper 中使用反序列化修饰符,通过模块在对象反序列化时覆盖启用的功能集。 这个应该可以解决问题: public class FeatureModifyingBeanDeserializerModifier extends BeanDeserializerModifier { private Collection<Class<?>> modifiedClasses; public FeatureModifyingBeanDeserializerModifier(Collection<Class<?>> modifiedClasses) { this.modifiedClasses = Collections.unmodifiableSet(new HashSet<Class<?>>(modifiedClasses)); } @Override public JsonDeserializer<?> modifyDeserializer( DeserializationConfig config, BeanDescription beanDesc, final JsonDeserializer<?> deserializer) { JsonDeserializer<?> result = deserializer; Class<?> beanClass = beanDesc.getBeanClass(); if (modifiedClasses.contains(beanClass)) { result = new FeatureModifyingStdDeserializer(deserializer, beanClass); } return result; } private static class FeatureModifyingStdDeserializer extends StdDeserializer<Object> { private JsonDeserializer<?> deserializer; private FeatureModifyingStdDeserializer( JsonDeserializer<?> deserializer, Class<?> beanClass) { super(beanClass); this.deserializer = deserializer; } @Override public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { p.enable(JsonParser.Feature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER); return deserializer.deserialize(p, ctxt); } } } 您必须将其作为模块注册到 ObjectMapper,如下所示: ObjectMapper objectMapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); module.setDeserializerModifier(new FeatureModifyingBeanDeserializerModifer(Arrays.asList(Journey.class))); objectMapper.registerModule(module); 对于序列化,您可以向 Journey 类添加 @JsonSerialize 注解,并以您想要的任何方式序列化它。 如果您需要编写未转义的字符串,您可以使用 JsonGenerator 中的 writeRaw。 Szymon Stepniak 给出了正确答案,而我有一些评论。 它也可以只定义一个转换器 bean。请注意,它不能是 MappingJackson2HttpMessageConverter 的类型,因为它将通过自动配置隐藏默认类型(参见 org.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration.MappingJackson2HttpMessageConverterConfiguration#mappingJackson2HttpMessageConverter)。 HttpMessageConverter 或 AbstractHttpMessageConverter 的类型效果很好。 默认的 MIME 为 application/*+json,这意味着它也可以接受 application/test+json。所以你的转换器必须有更高的优先级。定义一个HttpMessageConverters的bean(带有“s”,作为转换器管理器)可以显式地实现它。请记住,所有其他自定义转换器 bean 都需要传递到其构造函数中,否则它们将被禁用。 如果您之前接受了 null mediaType,请考虑覆盖 canRead 和 canWrite。 @Bean public HttpMessageConverter<Object> yourConverter() { AbstractHttpMessageConverter<Object> result = new MappingJackson2HttpMessageConverter(yourObjectMapper()) { @Override protected boolean canRead(MediaType mediaType) { // canRead() accepts null mediaType as default return mediaType != null && super.canRead(mediaType); } @Override protected boolean canWrite(MediaType mediaType) { // canWrite() accepts null mediaType as default return mediaType != null && super.canWrite(mediaType); } }; result.setSupportedMediaTypes(List.of(MediaType.valueOf("application/test+json")))); return result; } 添加 produces 和 Accept http 标头,这样就不会以默认样式响应 json。 @RequestMapping(method = RequestMethod.POST, consumes = {"application/json", "application/test+json"}, produces = {"application/json", "application/test+json"}) public ResponseEntity<ResponseDto<MyClass> process(@RequestBody RequestDto<MyClass> request) { return null; } 一个肮脏的黑客:您可以为 MyClass 编写自定义序列化器和反序列化器,在那里您明确使用两个单独的对象映射器,一个用于序列化(用于响应),第二个用于反序列化(用于请求)。 但最好找到一种显式自定义 Spring 对象映射器的方法。

回答 4 投票 0

解析json对象并获取原始子字符串

鉴于下面的 JSON,我目前有 Jackson 代码,它将把它解析成一个带有子对象数组的对象。 我可以很容易地将每个子对象序列化回字符串。 但我是

回答 1 投票 0

将对象转换为扩展多个接口的接口

Jackson 的 objectMapper.readValues(...) 返回一个 MappingIterator 类,它同时实现了 Closeable 和 Iterator: 公共类 MappingIterator 实现 Iterator,Closeable {....

回答 1 投票 0

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