Skip to content

StackOverflowError with contentConverter that returns array type #357

@fschopp

Description

@fschopp

Jackson version: 2.3.0

The following code snippet

static class A { }

static class B {
    @JsonSerialize(contentConverter = AToStringConverter.class)
    public List<A> list = Arrays.asList(new A());
}

static class AToStringConverter extends StdConverter<A, List<String>> {
    @Override
    public List<String> convert(A value) {
        return Arrays.asList("Hello world.");
    }
}

@Test
void testBSerialization() throws Exception {
    new ObjectMapper().writeValueAsString(new B());
}

produces the following endless recursion:

[...]
at com.fasterxml.jackson.databind.ser.std.StdSerializer.findConvertingContentSerializer(StdSerializer.java:252)
at com.fasterxml.jackson.databind.ser.impl.StringCollectionSerializer.createContextual(StringCollectionSerializer.java:91)
at com.fasterxml.jackson.databind.SerializerProvider.handleSecondaryContextualization(SerializerProvider.java:835)
at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:503)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.findConvertingContentSerializer(StdSerializer.java:252)
at com.fasterxml.jackson.databind.ser.impl.StringCollectionSerializer.createContextual(StringCollectionSerializer.java:91)
at com.fasterxml.jackson.databind.SerializerProvider.handleSecondaryContextualization(SerializerProvider.java:835)
at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:503)
[...]

It seems that the @JsonSerialize annotation is applied both before and after the conversion.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions