提问人:Dlcdoee 提问时间:5/1/2023 最后编辑:Dlcdoee 更新时间:5/1/2023 访问量:438
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
问:
所以我编造了这个问题,这基本上和我在工作中遇到的问题是一样的。我依赖于一个对象,但我无权访问 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 个
答: 暂无答案
评论