1 回答
TA贡献1862条经验 获得超7个赞
我建议简单地进行空检查,或者如您所言,通过异常处理。
@Override
public void serialize(
Prodotto prod, JsonGenerator jgen, SerializerProvider serializer) throws IOException {
jgen.writeStartObject();
// getPeso_netto returns an Integer, that in the example is null
if (prod.getPeso_netto() != null)
jgen.writeNumberField("peso_netto", prod.getPeso_netto());
else {
jgen.writeNullField("peso_netto");
}
编辑说明
JsonGenerator.writeNumberField 方法具有以下方法主体:
public final void writeNumberField(String fieldName, int value) throws IOException {
this.writeFieldName(fieldName);
this.writeNumber(value);
}
如您所见,该方法需要一个 int,而不是 Integer。编译器试图将 Integer 自动装箱为 int。NPE 失败,因为 Integer 是空对象。因此,NPE 不是“由 jackson 库的代码”抛出的,而是在试图将自动装箱的空值作为 int 传递给 jackson 方法时从 JVM 抛出的。
您可以使用以下代码段测试此行为:
Integer x = null;
x = 1 + x; // will throw NPE
添加回答
举报