1 回答

TA貢獻(xiàn)1862條經(jīng)驗 獲得超7個贊
我建議簡單地進(jìn)行空檢查,或者如您所言,通過異常處理。
@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
添加回答
舉報