Skip to content

@Jsonsetter with Nulls.SKIP collides with DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL when parsing enum #2015

@ndori

Description

@ndori

Hi, I've noticed a behavior I think should be different with
@jsonsetter(value = "foo", nulls = Nulls.SKIP)
private String foo;
and with .configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)

in that case, I would expect that if there is an unknown enum the setter will skip the null set, as I told him I don't want you to set null.

but what is probably happening is that it sees a value which is not null so it tries to set it, then when it can't set it, it becomes null.

I realize that it will be probably hard to fix, but on the other hand, the whole point of the nulls attribute is to do something else with nulls...

test case:

    public enum NUMS{
        ONE, TWO
    }

    public static class Pojo {
        @JsonSetter(value = "number", nulls = Nulls.SKIP)
        NUMS number = NUMS.TWO;
    }
    public void foo() {
        ObjectMapper parser = new ObjectMapper();
        parser.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);

        String json = "{\"number\":\"THREE\"}";

        try {
            Pojo p = parser.readValue(json, Pojo.class);
            //p.number == null , should be TWO
        } catch (IOException e) { }
    }

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