JsonMappingException (was java.lang.NullPointerException)

2022-09-02 08:57:12

我一直在寻找这个问题,但没有找到任何答案,所以要么我错过了一些很明显的东西,没有人写过任何东西,要么我遇到了一个不寻常的问题。我希望这是第一个...

我正在使用第三方库 (IDMLlib) 从以 .idml 格式存储的 Adobe InDesign 文档中提取信息。内容很容易阅读并存储在“Idml”类型的对象中,其中包含我需要的所有内容。现在,我想使用 Jackson JSON 将此对象发送到 Web 客户端(浏览器)。

我遇到了2个问题:

1)对象树充满了循环引用。我通过在注释中使用Mix-ins来解决此问题

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")  

所以现在我已经准备了很多混音,如果需要的话,问题2。

2)我在序列化时不断收到新的特定于对象的错误。

--Output from testMethodsReturnsSomething--
| Failure:  testMethods(package.IdmlServiceTests)
|  com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: de.fhcon.idmllib.api.elements.Idml["document"]->de.fhcon.idmllib.api.elements.Document["tags"]->de.fhcon.idmllib.api.elements.tags.Tags["xmltagList"]->java.util.ArrayList[0]->de.fhcon.idmllib.api.elements.tags.XMLTag["tagColor"]->de.fhcon.idmllib.api.elements.typedefs.InDesignUIColorType["greenValue"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:218)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:183)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:155)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:533)
...

我尝试过编写自定义 NullValue/NullKey 序列化程序,但这对 NullPointerException 没有帮助。

有没有我可以在混音中使用的注释来处理这个问题?
或者有没有另一种方法可以让我序列化这个对象?


答案 1

你是对的,可以处理值,但不能。在我的情况下,我的属性是类型,但 getter 返回的是值而不是值。只要该值不为空,这是可以接受的。但是,当该值为 null 时,jackson 无法序列化 的 null 值。DoubledoubleLonglongLonglong

只需更改 getter 以返回 a 而不是固定的它。验证您的 getter 是否在您的案例中返回 a 而不是 a。LonglongDoubledouble

ps:我知道这个问题已经很老了,但是因为我遇到了同样的问题,而且这个问题在谷歌答案中排名第二......似乎很公平地回答它,而不是从来没有


答案 2

我不知道这是否仍然有效,但是,我通过更改的版本解决了这个问题。早些时候,我使用2.3.0并收到相同的错误。我把它改成了2.7.8,现在工作正常。com.fasterxml.jackson.dataformat:jackson-dataformat-yaml