Skip to content

Introduce @JsonInclude for Collection #5243

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 11 commits into
base: 2.x
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,26 @@ public IndexedListSerializer(IndexedListSerializer src,
Boolean unwrapSingle) {
super(src, property, vts, valueSerializer, unwrapSingle);
}

public IndexedListSerializer(IndexedListSerializer src,
BeanProperty property, TypeSerializer vts, JsonSerializer<?> valueSerializer,
Boolean unwrapSingle, Object suppressableValue, boolean suppressNulls) {
super(src, property, vts, valueSerializer, unwrapSingle, suppressableValue, suppressNulls);
}

@Override
public IndexedListSerializer withResolved(BeanProperty property,
TypeSerializer vts, JsonSerializer<?> elementSerializer,
Boolean unwrapSingle) {
return new IndexedListSerializer(this, property, vts, elementSerializer, unwrapSingle);
}

@Override
public IndexedListSerializer withResolved(BeanProperty property,
TypeSerializer vts, JsonSerializer<?> elementSerializer,
Boolean unwrapSingle, Object suppressableValue, boolean suppressNulls) {
return new IndexedListSerializer(this, property, vts, elementSerializer, unwrapSingle, suppressableValue, suppressNulls);
}

/*
/**********************************************************
Expand Down Expand Up @@ -71,25 +84,53 @@ public final void serialize(List<?> value, JsonGenerator gen, SerializerProvider
if (((_unwrapSingle == null) &&
provider.isEnabled(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED))
|| (_unwrapSingle == Boolean.TRUE)) {
serializeContents(value, gen, provider);
if ((_suppressableValue != null) || _suppressNulls) {
serializeFilteredContents(value, gen, provider);
} else {
serializeContents(value, gen, provider);
}
return;
}
}
gen.writeStartArray(value, len);
serializeContents(value, gen, provider);
if ((_suppressableValue != null) || _suppressNulls) {
serializeFilteredContents(value, gen, provider);
} else {
serializeContents(value, gen, provider);
}
gen.writeEndArray();
}

@Override
public void serializeContents(List<?> value, JsonGenerator g, SerializerProvider provider)
throws IOException
{
serializeContentsImpl(value, g, provider, false);
}

@Override
protected void serializeFilteredContents(List<?> value, JsonGenerator g, SerializerProvider provider) throws IOException
{
serializeContentsImpl(value, g, provider, true);
}

private void serializeContentsImpl(List<?> value, JsonGenerator g, SerializerProvider provider, boolean filtered)
throws IOException
{
if (_elementSerializer != null) {
serializeContentsUsing(value, g, provider, _elementSerializer);
if (filtered) {
serializeFilteredContentsUsing(value, g, provider, _elementSerializer);
} else {
serializeContentsUsing(value, g, provider, _elementSerializer);
}
return;
}
if (_valueTypeSerializer != null) {
serializeTypedContents(value, g, provider);
if (filtered) {
serializeFilteredTypedContents(value, g, provider);
} else {
serializeTypedContents(value, g, provider);
}
return;
}
final int len = value.size();
Expand All @@ -102,6 +143,9 @@ public void serializeContents(List<?> value, JsonGenerator g, SerializerProvider
for (; i < len; ++i) {
Object elem = value.get(i);
if (elem == null) {
if (filtered && _suppressNulls) {
continue;
}
provider.defaultSerializeNull(g);
} else {
Class<?> cc = elem.getClass();
Expand All @@ -116,6 +160,10 @@ public void serializeContents(List<?> value, JsonGenerator g, SerializerProvider
}
serializers = _dynamicSerializers;
}
// Check if this element should be suppressed (only in filtered mode)
if (filtered && !_shouldSerializeElement(elem, serializer, provider)) {
continue;
}
serializer.serialize(elem, g, provider);
}
}
Expand All @@ -124,9 +172,23 @@ public void serializeContents(List<?> value, JsonGenerator g, SerializerProvider
}
}

public void serializeContentsUsing(List<?> value, JsonGenerator jgen, SerializerProvider provider,
private void serializeContentsUsing(List<?> value, JsonGenerator jgen, SerializerProvider provider,
JsonSerializer<Object> ser)
throws IOException
{
serializeContentsUsingImpl(value, jgen, provider, ser, false);
}

private void serializeFilteredContentsUsing(List<?> value, JsonGenerator jgen, SerializerProvider provider,
JsonSerializer<Object> ser)
throws IOException
{
serializeContentsUsingImpl(value, jgen, provider, ser, true);
}

private void serializeContentsUsingImpl(List<?> value, JsonGenerator jgen, SerializerProvider provider,
JsonSerializer<Object> ser, boolean filtered)
throws IOException
{
final int len = value.size();
if (len == 0) {
Expand All @@ -137,11 +199,20 @@ public void serializeContentsUsing(List<?> value, JsonGenerator jgen, Serializer
Object elem = value.get(i);
try {
if (elem == null) {
if (filtered && _suppressNulls) {
continue;
}
provider.defaultSerializeNull(jgen);
} else if (typeSer == null) {
ser.serialize(elem, jgen, provider);
} else {
ser.serializeWithType(elem, jgen, provider, typeSer);
// Check if this element should be suppressed (only in filtered mode)
if (filtered && !_shouldSerializeElement(elem, ser, provider)) {
continue;
}
if (typeSer == null) {
ser.serialize(elem, jgen, provider);
} else {
ser.serializeWithType(elem, jgen, provider, typeSer);
}
}
} catch (Exception e) {
// [JACKSON-55] Need to add reference information
Expand All @@ -150,7 +221,19 @@ public void serializeContentsUsing(List<?> value, JsonGenerator jgen, Serializer
}
}

public void serializeTypedContents(List<?> value, JsonGenerator jgen, SerializerProvider provider)
private void serializeTypedContents(List<?> value, JsonGenerator jgen, SerializerProvider provider)
throws IOException
{
serializeTypedContentsImpl(value, jgen, provider, false);
}

private void serializeFilteredTypedContents(List<?> value, JsonGenerator jgen, SerializerProvider provider)
throws IOException
{
serializeTypedContentsImpl(value, jgen, provider, true);
}

private void serializeTypedContentsImpl(List<?> value, JsonGenerator jgen, SerializerProvider provider, boolean filtered)
throws IOException
{
final int len = value.size();
Expand All @@ -164,6 +247,9 @@ public void serializeTypedContents(List<?> value, JsonGenerator jgen, Serializer
for (; i < len; ++i) {
Object elem = value.get(i);
if (elem == null) {
if (filtered && _suppressNulls) {
continue;
}
provider.defaultSerializeNull(jgen);
} else {
Class<?> cc = elem.getClass();
Expand All @@ -178,6 +264,10 @@ public void serializeTypedContents(List<?> value, JsonGenerator jgen, Serializer
}
serializers = _dynamicSerializers;
}
// Check if this element should be suppressed (only in filtered mode)
if (filtered && !_shouldSerializeElement(elem, serializer, provider)) {
continue;
}
serializer.serializeWithType(elem, jgen, provider, typeSer);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,22 @@ public IndexedStringListSerializer(IndexedStringListSerializer src,
Boolean unwrapSingle) {
super(src, unwrapSingle);
}

public IndexedStringListSerializer(IndexedStringListSerializer src,
Boolean unwrapSingle, Object suppressableValue, boolean suppressNulls) {
super(src, unwrapSingle, suppressableValue, suppressNulls);
}

@Override
public JsonSerializer<?> _withResolved(BeanProperty prop, Boolean unwrapSingle) {
return new IndexedStringListSerializer(this, unwrapSingle);
}

@Override
public JsonSerializer<?> _withResolved(BeanProperty prop, Boolean unwrapSingle,
Object suppressableValue, boolean suppressNulls) {
return new IndexedStringListSerializer(this, unwrapSingle, suppressableValue, suppressNulls);
}

@Override protected JsonNode contentSchema() { return createSchemaNode("string", true); }

Expand All @@ -69,12 +80,20 @@ public void serialize(List<String> value, JsonGenerator g,
if (((_unwrapSingle == null) &&
provider.isEnabled(SerializationFeature.WRITE_SINGLE_ELEM_ARRAYS_UNWRAPPED))
|| (_unwrapSingle == Boolean.TRUE)) {
serializeContents(value, g, provider, 1);
if ((_suppressableValue != null) || _suppressNulls) {
serializeFilteredContents(value, g, provider, 1);
} else {
serializeContents(value, g, provider, 1);
}
return;
}
}
g.writeStartArray(value, len);
serializeContents(value, g, provider, len);
if ((_suppressableValue != null) || _suppressNulls) {
serializeFilteredContents(value, g, provider, len);
} else {
serializeContents(value, g, provider, len);
}
g.writeEndArray();
}

Expand All @@ -92,14 +111,33 @@ public void serializeWithType(List<String> value, JsonGenerator g, SerializerPro

private final void serializeContents(List<String> value, JsonGenerator g,
SerializerProvider provider, int len) throws IOException
{
serializeContentsImpl(value, g, provider, len, false);
}

private final void serializeFilteredContents(List<String> value, JsonGenerator g,
SerializerProvider provider, int len) throws IOException
{
serializeContentsImpl(value, g, provider, len, true);
}

private final void serializeContentsImpl(List<String> value, JsonGenerator g,
SerializerProvider provider, int len, boolean filtered) throws IOException
{
int i = 0;
try {
for (; i < len; ++i) {
String str = value.get(i);
if (str == null) {
if (filtered && _suppressNulls) {
continue;
}
provider.defaultSerializeNull(g);
} else {
// Check if this element should be suppressed (only in filtered mode)
if (filtered && !_shouldSerializeElement(str, null, provider)) {
continue;
}
g.writeString(str);
}
}
Expand Down
Loading
Loading