如何将java.lang.String的空白JSON字符串值反序列化为null?
我正在尝试使用简单的JSON反序列化为Java对象。不过,我,让空 字符串
值,java.lang.String
属性值。在其余的属性中,空白值将转换为 空 值(这是我想要的)。
我的JSON和相关的Java类在下面列出。
JSON字串:
{ "eventId" : 1,
"title" : "sample event",
"location" : ""
}
EventBean 类POJO:
public class EventBean { public Long eventId;
public String title;
public String location;
}
我的主要课程代码:
ObjectMapper mapper = new ObjectMapper();mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
try {
File file = new File(JsonTest.class.getClassLoader().getResource("event.txt").getFile());
JsonNode root = mapper.readTree(file);
// find out the applicationId
EventBean e = mapper.treeToValue(root, EventBean.class);
System.out.println("It is " + e.location);
}
我期待打印“它为空”。相反,我得到“ It is”。显然, 杰克逊 在转换为我的 String 对象类型时并未将空白String值视为NULL 。
我读到了预期的地方。但是,对于 java.lang.String 我也要避免这种情况。有没有简单的方法?
回答:
Jackson会为您提供其他对象的null,但对于String则会给您空字符串。
但是您可以使用“自定义” JsonDeserializer
来执行此操作:
class CustomDeserializer extends JsonDeserializer<String> { @Override
public String deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException, JsonProcessingException {
JsonNode node = jsonParser.readValueAsTree();
if (node.asText().isEmpty()) {
return null;
}
return node.toString();
}
}
在课堂上,您必须将其用于位置字段:
class EventBean { public Long eventId;
public String title;
@JsonDeserialize(using = CustomDeserializer.class)
public String location;
}
以上是 如何将java.lang.String的空白JSON字符串值反序列化为null? 的全部内容, 来源链接: utcz.com/qa/417760.html