Json jackson以不存在和空值读取到“”;和编组“”;不存在的价值观?

Json jackson以不存在和空值读取到“”;和编组“”;不存在的价值观?,json,jackson,Json,Jackson,我通读了这篇文章,其中有一个很酷的技巧 mapper.configOverride(String.class) .setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY)); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); 另一方面,我通读了这篇文章,其中有一个很酷的技巧 mapper.configOverride(String.cl

我通读了这篇文章,其中有一个很酷的技巧

mapper.configOverride(String.class)
  .setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
另一方面,我通读了这篇文章,其中有一个很酷的技巧

mapper.configOverride(String.class)
  .setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
这是非常非常接近,除了我真的不希望传入的数据在任何情况下为空。我使用上述设置打印了以下4种情况的代码,但希望修复空部分,以便将任何json解组为java

public class MapperTest {
    private static final Logger log = LoggerFactory.getLogger(MapperTest.class);

    private ObjectMapper mapper = new ObjectMapper();
    public MapperTest() {
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        mapper.configOverride(String.class)
                .setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));
    }

    public static void main(String[] args) throws JsonProcessingException {
        new MapperTest().start();
    }

    private void start() throws JsonProcessingException {
        //write out java color=null resulting in NO field...
        String val = mapper.writeValueAsString(new Something());
        log.info("val="+val);

        Something something = mapper.readValue(val, Something.class);
        log.info("value='"+something.getColor()+"'");

        //write out java color="" resulting in NO field...
        Something s = new Something();
        s.setColor("");
        String val2 = mapper.writeValueAsString(new Something());
        log.info("val="+val2);

        String temp = "{\"color\":null,\"something\":0}";
        Something something2 = mapper.readValue(temp, Something.class);
        log.info("value2='"+something2.getColor()+"'");
    }
}
然后输出为

    INFO: val={"something":0}
    INFO: value='null'
    INFO: val={"something":0}
    INFO: value2=''
注意:值='null'不是我想要的,我希望它也是空字符串。请注意,如果客户提供的颜色为“null”,则会产生空字符串。不存在对我们来说应该是同样的结果。 我的意思是,这是一个巨大的胜利,在这方面,我们的失误更少。 谢谢 院长