14

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

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

我遇到了两个问题:

1)对象树充满了循环引用。我已经通过使用带有注释的 Mix-ins 解决了这个问题

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

所以现在我已经准备好了很多 Mix-ins,如果问题 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 没有帮助。

有没有我可以在我的 Mix-ins 中使用的注释来处理这个问题?
或者我还有其他方法可以序列化这个对象吗?

4

4 回答 4

35

你是对的,Double可以处理值,double但不能。就我而言,我的属性是类型Long,但 getter 返回的是long值而不是Long值。只要值不是null ,这是可以接受的。但是当值为null,杰克逊无法序列化.long

只需更改 getter 以返回 aLong而不是long固定它。验证您的吸气剂是否返回 aDouble而不是 adouble在您的情况下。

ps:我知道这个问题已经很老了,但是因为我遇到了同样的问题,而且这个问题在谷歌答案中排名第二……似乎迟到总比从不

于 2017-04-19T23:25:55.743 回答
4

我不知道这是否仍然有效,但是我通过更改com.fasterxml.jackson.dataformat:jackson-dataformat-yaml. 早些时候我使用的是 2.3.0 并且遇到了同样的错误。我将其更改为 2.7.8,现在可以正常工作了。

于 2018-11-05T12:51:44.753 回答
0

从 1.5 升级到 spring boot 2.4.1 后,我遇到了同样的问题,问题是在调用 GET 请求时字段之一没有被序列化。之前的代码如下所示(在春季启动升级之前)

@Bean
    public RepositoryRestConfigurer getRestConfigurer() {
        return new RepositoryRestConfigurerAdapter() {
            @Override
            void configureJacksonObjectMapper(ObjectMapper objectMapper) {
                super.configureJacksonObjectMapper(objectMapper)
                def validationResponseSerializerUtil = new ValidationResponseSerializerUtil()
                def simpleModule = validationResponseSerializerUtil.getSerializeModule()
                objectMapper.registerModule(simpleModule)
                objectMapper.enable(SerializationFeature.INDENT_OUTPUT)
            }
        }
    }

但是在 spring boot 升级之后,上面的代码(通过 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
    }

现在一切正常

于 2021-05-12T20:38:55.893 回答
0

我在一个使用@com.fasterxml.jackson.annotation.JsonCreator 标记构造函数的类上遇到了 NullPointerException。当我删除标签时,反序列化 json -> mojo 起作用了。

于 2022-01-19T14:20:31.067 回答