JsonMappingException(was java.lang.NullPointerException)

JsonMappingException(was java.lang.NullPointerException),java,json,nullpointerexception,jackson,idml,Java,Json,Nullpointerexception,Jackson,Idml,我已经搜索了一段时间,但没有找到任何答案,所以要么我错过了一些显而易见的东西,没有人写过任何关于它的东西,要么我遇到了一个不寻常的问题。我希望这是第一次 我正在使用第三方库()从以.idml格式存储的Adobe InDesign文档中提取信息。内容很容易读取并存储在“Idml”类型的对象中,该对象包含我需要的所有内容。现在,我想使用将此对象发送到web客户端(浏览器) 我遇到了两个问题: 1) 对象树中充满了循环引用。我已经通过使用注释的Mix-ins修复了这个问题 @JsonIdentityI

我已经搜索了一段时间,但没有找到任何答案,所以要么我错过了一些显而易见的东西,没有人写过任何关于它的东西,要么我遇到了一个不寻常的问题。我希望这是第一次

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

我遇到了两个问题:

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没有帮助

在我的混合插件中是否有可用于处理此问题的注释?

或者有没有其他方法可以序列化此对象?

你说得对,
Double
可以处理空值,
Double
不能。 在我的例子中,我的属性的类型是
Long
,但是getter返回的是
Long
值,而不是
Long
值。只要值不为null,这是可以接受的。但是当值为null时,jackson无法序列化
long
的null值

只需更改getter以返回
Long
而不是
Long
即可修复此问题。 验证getter在您的情况下是否返回
Double
,而不是
Double


ps:我知道这个问题很老了,但因为我也遇到了同样的问题,而且这个问题在谷歌答案中排名第二。。。我不知道这是否仍然有效,但我通过更改
com.fasterxml.jackson.dataformat:jackson dataformat yaml
的版本解决了这个问题。之前我使用的是2.3.0,并且得到了同样的错误。我将其更改为2.7.8,现在工作正常。

从1.5升级到spring boot 2.4.1后,我遇到了相同的问题,问题之一是调用GET请求时字段未序列化。前面的代码如下所示(在spring boot升级之前)

但在spring引导升级之后,上面的代码(通过RepositoryRestConfigurer序列化ValidationResponse)不起作用,将其替换为下面的代码

@Bean(name = "objectMapper")
    ObjectMapper objectMapper() {
        def validationResponseSerializerUtil = new ValidationResponseSerializerUtil()
        def simpleModule = validationResponseSerializerUtil.getSerializeModule()
        ObjectMapper objectMapper=new ObjectMapper()
        objectMapper.registerModule(simpleModule)
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT)
        return objectMapper
    }

现在一切正常

唉,真正需要的是堆栈跟踪中更接近原始NPE的部分。这一部分只指向catch子句,该子句返回
运行时异常。在不知道的情况下,不可能说如何避免它。事实证明属性“greenValue”的类型是Double,而不是Double,因此它的值也可以为null。虽然Double可以处理空值,但Double不能。我的理论是Jackson JSON试图将其作为原始数据类型访问,导致崩溃。仍然不知道该怎么办,虽然…这听起来像是处理过程中可能出现的错误,所以最好为Jackson提交一个错误。虽然大多数基元类型的处理程序都会将null强制为默认值(此处为0.0d),但可能是对象Id处理程序没有采取适当的预防措施,或者是setter/field访问触发了该问题。Java在很多情况下都会自动展开。谢谢你,拯救了我的一天=)谢谢你,它真的帮助了我!你的回答对我帮助很大。感谢您提供的解决方案。当我尝试将包含布尔值的对象作为属性进行封送时,我也遇到了同样的问题,但在其getter方法中返回了布尔值。只是将getter方法的返回类型更改为Boolean就解决了这个问题,
@Bean(name = "objectMapper")
    ObjectMapper objectMapper() {
        def validationResponseSerializerUtil = new ValidationResponseSerializerUtil()
        def simpleModule = validationResponseSerializerUtil.getSerializeModule()
        ObjectMapper objectMapper=new ObjectMapper()
        objectMapper.registerModule(simpleModule)
        objectMapper.enable(SerializationFeature.INDENT_OUTPUT)
        return objectMapper
    }