【问题标题】:jackson serializer throw NullPointerException when disable annotation杰克逊序列化程序在禁用注释时抛出 NullPointerException
【发布时间】:2014-10-26 07:31:41
【问题描述】:
 objectMapper = new ObjectMapper();
 objectMapper.configure(SerializationConfig.Feature.USE_ANNOTATIONS, false);

我使用上面的代码来禁用注释,但是当运行到

 protected void _addMixUnders(Method src, AnnotatedMethod target)
{
    for (Annotation a : src.getDeclaredAnnotations()) {
        if (_annotationIntrospector.isHandled(a)) {
            target.addIfNotPresent(a);
        }
    }
}

在 AnnotatedClass 中,_annotationIntrospector 为 null,因此它会抛出 NullPointerException。 我该怎么办 ?谢谢。

java.lang.NullPointerException
at org.codehaus.jackson.map.introspect.AnnotatedClass._addMixUnders(AnnotatedClass.java:974)
at org.codehaus.jackson.map.introspect.AnnotatedClass._addMemberMethods(AnnotatedClass.java:637)
at org.codehaus.jackson.map.introspect.AnnotatedClass.resolveMemberMethods(AnnotatedClass.java:413)
at org.codehaus.jackson.map.introspect.BasicClassIntrospector.classWithCreators(BasicClassIntrospector.java:185)
at org.codehaus.jackson.map.introspect.BasicClassIntrospector.collectProperties(BasicClassIntrospector.java:157)
at org.codehaus.jackson.map.introspect.BasicClassIntrospector.forSerialization(BasicClassIntrospector.java:96)
at org.codehaus.jackson.map.introspect.BasicClassIntrospector.forSerialization(BasicClassIntrospector.java:16)
at org.codehaus.jackson.map.SerializationConfig.introspect(SerializationConfig.java:973)
at org.codehaus.jackson.map.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:251)
at org.codehaus.jackson.map.ser.StdSerializerProvider._createUntypedSerializer(StdSerializerProvider.java:782)
at org.codehaus.jackson.map.ser.StdSerializerProvider._createAndCacheUntypedSerializer(StdSerializerProvider.java:758)
at org.codehaus.jackson.map.ser.StdSerializerProvider.findValueSerializer(StdSerializerProvider.java:380)
at org.codehaus.jackson.map.ser.std.BeanSerializerBase.resolve(BeanSerializerBase.java:307)
at org.codehaus.jackson.map.ser.impl.SerializerCache.addAndResolveNonTypedSerializer(SerializerCache.java:159)
at org.codehaus.jackson.map.ser.StdSerializerProvider._createAndCacheUntypedSerializer(StdSerializerProvider.java:744)
at org.codehaus.jackson.map.ser.StdSerializerProvider.findValueSerializer(StdSerializerProvider.java:344)
at org.codehaus.jackson.map.ser.StdSerializerProvider.findTypedValueSerializer(StdSerializerProvider.java:420)
at org.codehaus.jackson.map.ser.StdSerializerProvider._serializeValue(StdSerializerProvider.java:601)
at org.codehaus.jackson.map.ser.StdSerializerProvider.serializeValue(StdSerializerProvider.java:256)
at org.codehaus.jackson.map.ObjectMapper._configAndWriteValue(ObjectMapper.java:2575)
at org.codehaus.jackson.map.ObjectMapper.writeValueAsString(ObjectMapper.java:2097)

【问题讨论】:

  • 什么版本的杰克逊?你想序列化什么?
  • 使用 jackson 1.9.13 序列化具有枚举类型字段的类。如果没有枚举字段,序列化就ok了。
  • 请发布一个完全可重现的示例以及您获得的异常堆栈跟踪。
  • @SotiriosDelimanolis 我发现所有枚举字段都实现了一个带有 JsonValue 标记的函数的接口,我删除注释序列化程序就可以了。

标签: java annotations jackson serialization


【解决方案1】:

我知道这已经晚了 3 年,但对于后代来说,这对我有用:

// Don't use this:
// objectMapper.disable(SerializationConfig.Feature.USE_ANNOTATIONS);
// Use this instead:
objectMapper.setAnnotationIntrospector(AnnotationIntrospector.nopInstance());

这在 1.9.13-atlassian-1 中对我有用。

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多