com.fasterxml.jackson.databind.JsonMappingException:无法调用“java.lang.Integer.intValue()”,因为“this.a”为空

com.fasterxml.jackson.databind.JsonMappingException: Cannot invoke "java.lang.Integer.intValue()" because "this.a" is null

提问人:Dlcdoee 提问时间:5/1/2023 最后编辑:Dlcdoee 更新时间:5/1/2023 访问量:438

问:

所以我编造了这个问题,这基本上和我在工作中遇到的问题是一样的。我依赖于一个对象,但我无权访问 getter 的源代码。该字段是一个 Integer,但 getter 返回一个 in。最糟糕的是,他在构造函数中将 Integer 初始化为 null。如何序列化它,以便它可以返回值为 null 的对象?

public class TestObject {
    
    private Integer a;
    
    TestObject(){
        a = null;
    }

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }
    
    
}
public class Test {

    public static void main(String[] args) {
        TestObject a = new TestObject();
        ObjectMapper mapper = new ObjectMapper();
        SimpleModule simpleModule = new SimpleModule();
        mapper.registerModule(simpleModule);
        try {
            System.out.println(mapper.writeValueAsString(a));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
public class TestSerializer extends JsonSerializer<Integer> {
    @Override
    public void serialize(Integer tmpInt, 
                          JsonGenerator jsonGenerator, 
                          SerializerProvider serializerProvider) 
                          throws IOException, JsonProcessingException {
        jsonGenerator.writeObject(tmpInt.toString());
    }
}

错误:

com.fasterxml.jackson.databind.JsonMappingException:无法调用“java.lang.Integer.intValue()”,因为“this.a”为空(通过引用链:TestObject[“a”]) 在 com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:402) 在 com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:361) 在 com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:323) 在 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:780) 在 com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:178) 在 com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize (DefaultSerializerProvider.java:479) 在 com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:318) 在 com.fasterxml.jackson.databind.ObjectMapper._writeValueAndClose(ObjectMapper.java:4719) 在 com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:3964) 在 Test.main(Test.java:12) 原因:java.lang.NullPointerException:无法调用“java.lang.Integer.intValue()”,因为“this.a”为空 在 TestObject.getA(TestObject.java:11) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) 在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.base/java.lang.reflect.Method.invoke(Method.java:568) 在 com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:688) 在 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:772) ...另外 6 个

java json 序列化 jackson nullpointerexception

评论

0赞 Stone 5/1/2023
也许您可以将“null”整数序列化为一个特殊的 int 值,例如“0”,然后将其反序列化回“null”。

答: 暂无答案