package com.fasterxml.jackson.failing; import java.util.Objects; import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.databind.*; // Not sure if [databind#2572] is actually a bug, but behavior in 2.9 was // different from 2.10 in that no exception thrown and databind quietly just // left `null` for Beans as `null` even if "EMPTY" was indicated by configuration. public class JsonSetter2572Test extends BaseMapTest { static class Outer { @JsonProperty("inner") final Inner inner; @JsonCreator public Outer(@JsonProperty("inner") Inner inner) { this.inner = Objects.requireNonNull(inner, "inner"); } } static class Inner { @JsonProperty("field") final String field; @JsonCreator public Inner(@JsonProperty("field") String field) { this.field = field; } } public void testSetterWithEmpty() throws Exception { /* ObjectMapper mapper = newObjectMapper() .setDefaultSetterInfo(JsonSetter.Value.construct(Nulls.AS_EMPTY, Nulls.AS_EMPTY)); */ ObjectMapper mapper = jsonMapperBuilder() .defaultSetterInfo(JsonSetter.Value.construct(Nulls.AS_EMPTY, Nulls.AS_EMPTY)) .build(); String json = mapper.writeValueAsString(new Outer(new Inner("inner"))); Outer result = mapper.readValue(json, Outer.class); assertNotNull(result); assertNotNull(result.inner); // converted to "empty" bean //System.err.println("Final -> "+mapper.writeValueAsString(result)); } }