Я бы посоветовал просто выполнить нулевую проверку или, как вы указали, обработать через исключение.
@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);
}
Как видите, метод ожидает целое число, а не целое число.Компилятор пытается Autobox Integer для int.Это терпит неудачу с NPE, потому что Integer является нулевым объектом.Таким образом, NPE генерируется не «кодом библиотеки Джексона», а из JVM в точке, пытающейся передать автоматически упакованное нулевое значение как int в метод Джексона.
Это поведение можно проверить с помощью следующего фрагмента:
Integer x = null;
x = 1 + x; // will throw NPE