我的服务器 API 使用不同类型的多态对象。例如,我有一个 json:
{
"eventType": "FirstType",
"eventData": "some-useful-object"
}
科特林为它上课:
sealed class NotificationEvent {
data class SomeUsefulEvent(val eventData: String): NotificationEvent()
}
和mixin类:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "eventType"
)
@JsonSubTypes(
JsonSubTypes.Type(
value = NotificationEvent.SomeUsefulEvent::class,
name = "FirstType"
)
)
abstract class NotificationEventMixIn
当我从客户端呼叫时
jsonMapper.readValue<NotificationEvent>(event.data)
应用程序崩溃并显示 NPE:
java.lang.NullPointerException:尝试对com . faster XML . Jackson . databind . intro SPECT . annotatedfieldcollector . _ addFieldMixIns(annotatedfieldcollector . Java:110)处的空对象引用调用接口方法“Java . lang . object Java . util . map . get(Java . lang . object)”
我怎样才能避免这种崩溃?
在研究上浪费了一些时间之后,我发现在注释字段收集器#_findFields
中有一个
块调用JavaType.getRawClass(.getDeclaredFields()的
块,如果它返回一个空数组,则跳过所有 for
块,映射_fields
未初始化,并且在调用_addFieldMixIns
时保持空
值。
这是因为属性不是kotlin中的字段,并且父类没有字段。
可以通过将@JvmField
带注释的属性添加到通知事件
类来解决,如下所示:
sealed class NotificationEvent {
@Suppress("unused")
@JvmField val stub: Int = 0
data class SomeUsefulEvent(val eventData: String): NotificationEvent()
}
一切正常!
我希望这个问题能帮助某人,我鼓励杰克逊团队修复这个错误
我已经发布了类似的东西,但我仍然试图集中在我的问题上。 谢谢你能容忍我。 com.fasterxml.jackson.databind.jsonMappingException:无法构造FHIR.Element的实例,问题:抽象类型要么需要映射到具体类型,有自定义的反序列化器,要么需要在com.fasterxml.jackson.databind.jsonMappingException.from
我想使用Spring的RestTemplate plus Jackson来使用Web服务。我已经学习了几本教程,并且已经达到了创建DAO的目的。这是我获取所有域对象的方法: 但我的Web服务不会立即返回Station对象数组,而是以这种方式返回一个更具语义的表达式: 所以我的问题是,我不知道如何“告诉”RestTemplate在“stations”指示符之后立即解析对象列表,而不创建临时对象,这似
我明白它无法从嵌套JSON反序列化字符串。我解决这个问题的一个方法是通过编写自定义映射器 但是只要pojo中有变化,这就需要修改映射器,添加/删除字段。Mixin工作时没有任何变化,我该如何更新我的Mixin来处理objectId呢?
问题内容: 在Jersey上使用Jackson 处理器时,何时以及为何需要在两者之间使用注释? 杰克逊(Jackson)还提供了自己的服务提供商以直接使用。这种方法缺少什么?还是为什么我比其他人更喜欢 ps:我也用弹簧 问题答案: 为了生成JSON,通常只需指定即可。但是,这将默认采用JAXB路由。 使用Object-> JAXB-> JSON,您必须注释要映射的类。这可以很好地工作,但是一旦您要
我如何告诉Jackson忽略JSON名称? 我有以下POJO: 当我有这样的东西: “ABCName”:“foo”,然后杰克逊没有认出它抛出错误。 它期望的是: “abcName”:“foo”。 代码: 输出:{"abcname":"Foo"} 然后我试着用@JsonProperty(“ABCName”)注释ABCName 在我注释并运行代码之后,我得到的是:{“ABCName”:“Foo”,“A
首先,我不熟悉Jython。我正在寻找一种将python代码集成到Java项目中的方法。因此我正在调查Jython。 我正在尝试将一个 json 字符串转换为 Java 对象 - 在 python 中。 首先,我一直在努力让Jython找到我的java类。由于缺乏更优雅的解决方案,我可以通过简单地执行以下操作来向前迈进: 无论如何。。。 我正在尝试以下操作: 但是,在运行时,我收到以下错误: 我不