001package com.box.sdkgen.internal; 002 003import com.fasterxml.jackson.core.JsonGenerator; 004import com.fasterxml.jackson.databind.SerializerProvider; 005import com.fasterxml.jackson.databind.ser.PropertyWriter; 006import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; 007 008public class NullablePropertyFilter extends SimpleBeanPropertyFilter { 009 @Override 010 public void serializeAsField( 011 Object pojo, JsonGenerator jgen, SerializerProvider provider, PropertyWriter writer) 012 throws Exception { 013 014 Object value = writer.getMember().getValue(pojo); 015 boolean isNullable = writer.getMember().hasAnnotation(Nullable.class); 016 017 if (isNullable) { 018 // Always serialize if the field is explicitly set to null 019 if (value != null) { 020 writer.serializeAsField(pojo, jgen, provider); 021 return; 022 } 023 // If the field is explicitly set to null, serialize it 024 if (pojo instanceof NullableFieldTracker 025 && ((NullableFieldTracker) pojo).isFieldExplicitlySet(writer.getName())) { 026 writer.serializeAsField(pojo, jgen, provider); 027 return; 028 } 029 // If the field is not explicitly set and is null, skip serialization 030 return; 031 } 032 033 boolean isOneOfWithNoNonNullValue = 034 value instanceof OneOfUnion && !((OneOfUnion) value).hasAnyNonNullValue(); 035 if (value != null && !isOneOfWithNoNonNullValue) { 036 writer.serializeAsField(pojo, jgen, provider); 037 } 038 } 039}