问题标签 [jackson2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在这种情况下如何使用 Jackson 包?
嗨,我有一个如下的 Json:
现在我的要求是将 A、B、C 转换为 camelCase 表示法(根据需要),这是我通过使用 @JsonProperty 以及相应 POJO 类的 getter 和 setter 方法完成的。
最后,我的输出如下:
现在我想在 b 和 c 之间添加一个新的空对象,比如 d。
你能帮我追加一个新的空 JSON 对象吗?
所需的输出应该是这样的:
杰森:
我需要这样的东西:
我已经完成了 camelCase 的转换,但我需要插入新对象“mainSkills”。
spring-boot - 反序列化前的 Spring Boot 验证策略
我正在使用 Spring Boot 来运行 API。我想在反序列化之前验证用户请求参数,以防止杰克逊抛出反序列化异常。我的想法是最好在没有异常处理的情况下进行验证,但是如果您认为我错了,请告诉我。
现在我制作了一个带有@ControllerAdvice
注释的异常处理程序控制器,以在异常冒泡给用户之前捕获它们,但是有没有办法在杰克逊反序列化之前验证用户输入以检查错误?
我开始使用弹簧验证,但如果我编写自定义验证器并注释请求参数,@Validate
验证是否在反序列化之前进行?春季验证是要走的路吗?
我研究了使用注释进行验证(JSR 380),但我认为我需要对验证进行更多控制,这就是我编写自己的自定义验证器的原因。
我在想我可以编写一个自定义反序列化器来调用我的自定义验证器,但这是最好的方法。我正在寻找最佳实践和良好的验证策略。
在此先感谢您的帮助。
java - JsonMappingException:没有单字符串构造函数/工厂方法
[这不是不能从 JSON 字符串中实例化类型值的副本;没有单字符串构造函数/工厂方法:这是一个更简单的 POJO 和 JSON。我的解决方案也不同。]
我要解析并创建 POJO 的 JSON:
如果响应恰好是错误,它看起来像:
这是我定义的 POJO:
注释@Data
(告诉Lombok自动为类生成 getter、settertoString()
和hashCode()
方法)和@Accessors
(告诉 Lombok 以可以链接的方式生成 setter)来自Project Lombok。
似乎是一个简单的设置,但每次我运行时:
我收到错误消息:
为什么我需要一个单字符串构造函数SmsResponse
,如果需要,我在其中接受哪个字符串?
spring - 如何在 Spring Boot Jackson 日期序列化中应用默认时区
我已将 Spring Boot 应用程序配置为将日期序列化为 ISO8601 字符串:
这就是我得到的:
但是我的时区是欧洲/马德里。事实上,如果我打印TimeZone.getDefault()
这就是我得到的。
如何让杰克逊使用实际时区序列化这些日期时间值?格林威治标准时间+2
java - 如何将 ToXmlGenerator.Feature 添加到 Jackson2ObjectMapperBuilderCustomizer?
我有jackson
下面的bean配置。如何将ToXmlGenerator.Feature.WRITE_XML_DECLARATION
功能添加到构建器?
以下不起作用:
结果:
构造函数抛出异常;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在类路径资源 [org/springframework/boot/autoconfigure/web/JacksonHttpMessageConvertersConfiguration$MappingJackson2XmlHttpMessageConverterConfiguration.class] 中定义名称为“mappingJackson2XmlHttpMessageConverter”的 bean 创建错误:通过工厂方法进行 Bean 实例化失败; 嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter]:工厂方法“mappingJackson2XmlHttpMessageConverter”抛出异常;嵌套异常是 org.springframework.beans.FatalBeanException: Unknown feature class: com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator$Feature
我最初的目标是在反序列化期间添加以下行:
<?xml version="1.0" encoding="UTF-8"?>
.
也许有一种不同的方式而不是使用ToXmlGenerator
?
我也尝试了以下方法,但这也没有添加 xml 声明行:
java - Spring boot + Jackson - 始终将日期转换为 UTC
我在没有时间戳的情况下将日期保存在我的数据库中,所以我想标准化 Spring Boot Rest 控制器接收日期的方式,以便可以将服务部署在世界任何地方(AWS EC2 等)。
我尝试设置以下属性,但没有帮助:
还有一个属性,always true
,所以我没有设置,那就是:
我正在部署到 2 个单独的 Ubuntu 容器,一个在UTC
时区,另一个在我当前的时区America/Sao_Paulo
(GMT -3)。
有效载荷示例:
当服务部署在圣保罗时,它会收到:
这是正确的。
当服务部署在 UTC 上时,它会收到:
这是不正确的。
我将日期信息存储在 Java 中LocalDateTime
。
示例模型:
示例资源:
我无法更改所有生产机器的时区,我必须使用 Jackson 和 Java(如果可能)解决这个问题。
另一个限制:不能注释我的模型类来做到这一点。
我的pom.xml
(相关部分)
java - 杰克逊反序列化实现接口的对象并忽略接口属性
我有一个带注释的类,它实现了一个带有一个名为通用的只读属性的接口,因此我可以在程序的其他部分中.id()
提取不同类型的id 。
杰克逊应该忽略整个界面。但相反,我收到以下错误消息:
java.util.concurrent.ExecutionException
:com.fasterxml.jackson.databind.exc.InvalidDefinitionException
: 无法构造实例my.company.Identifiable
(没有创建者,如默认构造,存在):抽象类型要么需要映射到具体类型,具有自定义反序列化器,要么在 [Source: UNKNOWN; 行:-1,列:-1](通过参考链java.util.HashSet[0]
:)
在搜索该异常以及谷歌的整个前两页时,我已经尝试了这里找到的所有解决方案。他们都没有解决我遇到的确切问题,我无法从其中任何一个中插入针对我的具体问题的解决方案,CustomDeserializer
除了我不想写的。
我尝试过使用JsonTypeInfo
,但我以前从未使用过该注释,并且无法弄清楚我应该用它做什么。使用的解决方案与我的略有不同,他们实际上想要接口属性而不是忽略它。
在某些类中没有实际的id
成员变量,它只是method
返回一些被认为是id
程序的另一部分的东西。ID<String>
在某些情况下和ID<Integer>
其他情况下。
我试过用 和 注释,@JsonProperty(access = Access.READ_ONLY)
但@JsonIgnore
它们@JsonIgnoreProperties({"id"})
都没有改变异常。我也试过所有的mode
设置@JsonCreator
,都没有。
接口定义为:
示例类定义为:
这是绑定代码的样子:
在这种情况下,在哪里并且V
是一个.User
results
Array
在我添加接口之前,这个类和其他几个类的反序列化工作正常Identifiable<T>
,它们都因同样的异常而中断。
这不是一个abstract
类,每个方法都实现了。我想我已经把@JsonIgnore
适用的所有地方都放了。
我仍然得到那个异常,不知道如何解决它。
我有一种感觉,@JsonTypeInfo
注释中有一些东西可以解决这个问题,但是示例和 javadoc 并不是为不知道何时或如何使用注释的人编写的。
我错过了什么?
java - 如何使用 JsonIter 从 json 获取特定的键值,通过使用任何 getter 方法(如果可用)?
我正在使用http://jsoniter.com/ java lib 来解析 json ,似乎使用这个 lib ,它只能遍历 JSON 并且没有像我们在 org.json 中那样提供任何 api 来获取特定键的值像下面
jsonObject.get("some_key")
我们在http://jsoniter.com/中也有这种类型的 getter 方法,任何人都可以帮助我。
java - 如何在杰克逊 2.9.x 中禁用 0/1 到真/假的转换
我有一个需要严格 json 策略的项目。
例子:
以下json应该可以工作:
以下应该失败(抛出异常):
相同的:
true
基本上,如果有人提供与or不同的东西,我希望反序列化失败false
。不幸的是,杰克逊将1
其视为 true 和0
as false
。我找不到禁用这种奇怪行为的反序列化功能。
java - 如何避免杰克逊对象内的对象包装器
我对Jackson 和 Hibernate OGM 的春天很陌生。我从网络请求中得到如下 JSON 格式
订单的 Pojo 类
将文档插入 MongoDB 后。我得到如下
在这里,我需要避免在创建的每个文档中使用“Orderdata”名称。请帮我解决这个问题。