我一直在寻找这个问题,但没有找到任何答案,所以要么我错过了一些如此明显的东西,没有人写任何关于它,要么我遇到了一个不寻常的问题。我希望这是第一个...
我正在使用第三方库(IDMLlib)从以.idml格式存储的Adobe InDesign文档中提取信息。内容易于读取,并存储在“Idml”类型的对象中,该对象包含我所需的所有内容。现在,我想使用Jackson JSON将此对象发送到Web客户端(浏览器)。
我遇到了两个问题:
1)对象树中充满了循环引用。我已经通过使用混合和注解修复了这个问题
@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没有帮助。
是否有一个注解,我可以在我的混合使用,处理这一点?
或者有没有其他方法可以序列化这个对象?
5条答案
按热度按时间guz6ccqo1#
你是对的,
Double
可以处理 null 值,而double
不能。在我的例子中,我的属性是Long
类型,但是getter返回的是long
值而不是Long
值。只要值不是 null,这是可以接受的。但是当值是 null 时,jackson无法序列化long
的 null 值。只需将getter更改为返回
Long
而不是long
即可修复它。验证您的getter是否返回Double
而不是您的示例中的double
。ps:我知道这个问题很老了,但是因为我也有同样的问题,而且这个问题在谷歌答案中排名第二......似乎晚回答比不回答更公平
wfsdck302#
我不知道这是否仍然有效,但是,我通过改变
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml
的版本解决了这个问题。之前我使用的是2.3.0,也得到了同样的错误。我把它改为2.7.8,现在它工作正常。rhfm7lfc3#
我在从1.5升级到2.4.1后遇到了同样的问题,问题是在调用GET请求时,其中一个字段没有被序列化。之前的代码如下所示(在 Spring 启动升级之前)
但在 Spring 启动升级后,上述代码段(通过RepositoryRestConfigurer序列化ValidationResponse)无法正常工作,请将其替换为以下代码段
现在一切正常
yvgpqqbh4#
我在一个类上遇到了一个NullPointerException,在这个类上,我用@ com. fasterxml. jackson. annotation. JsonCreator标记了构造函数。当我删除这个标记时,反序列化json -〉mojo工作了。
q3qa4bjr5#
转换前始终检查:-
if(node.get("id")!=null) { int id = (Integer) ((IntNode)node.get("id")).numberValue();}
有可能你的json不包含任何键。那么它将抛出空指针异常。所以最好先检查空值。