如何在Java中将空字符串反序列化为null值?

时间:2019-06-05 14:06:37

标签: java jackson

我遇到一个问题,我尝试使用下面的代码将空字符串反序列化为空值。有没有办法适当地反序列化。我创建了一个类EmptyStringDeserializer,但是却无法创建自定义解串器。在下面,您可以找到我的EmptyStringDeserializer,以查看我做错了什么。

2 个答案:

答案 0 :(得分:1)

您可以在ObjectMapper中启用ACCEPT_EMPTY_STRING_AS_NULL_OBJECT

ObjectMapper mapper = new ObjectMapper();
mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);

或者,您可以定义自定义反序列化器:

public class CustomStringDeserializer extends JsonDeserializer<String> {

    @Override
    public String deserialize(JsonParser p, DeserializationContext ctxt) 
            throws IOException {

        String value = StringDeserializer.instance.deserialize(p, ctxt);
        if (value == null || value.trim().isEmpty()) {
            return null;
        }

        return value;
    }
}

并将其注册到您的ObjectMapper中的模块中:

SimpleModule module = new SimpleModule();
module.addDeserializer(String.class, new CustomStringDeserializer());

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(module);

此反序列化器将用于反序列化所有字符串。

答案 1 :(得分:0)

您的@JsonDeserialize应该在字段级别,而不是课程级别。在每个字符串字段上添加。