我无法让JsonDeserializer处理空值。我有一个json文件,我正在从那里读取我的记录类型的四个值:情况1,情况2,*或null。 JsonDeserializer对于前3个都可以正常工作。但是,在遇到null时似乎什么也没做。根据代码(请参见下面的自定义反序列化器),我希望这行代码
text = StringUtils.upperCase(jsonParser.getText());
引发异常(并因此将text =“ NULL”赋值。或者,按照
返回空字符串if (StringUtils.isBlank(text))
同样,我分配text =“ NULL”。但是,这些都不会发生。似乎根本没有处理空值(这是不可能的,对吗?)。我的
System.out.println("TEXT: " + text);
总是打印Case 1,Case 2或*,但绝不输出NULL。从字面上看,它似乎跳过了文件中的空条目,或者至少不以我的代码中说明的任何方式对其进行处理。 对于任何想法,我将不胜感激。谢谢!!
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import my.local.CustomValue;
import org.apache.commons.lang3.StringUtils;
import java.io.IOException;
public class CustomDeserializer extends JsonDeserializer<CustomValue> {
@Override
public CustomValue deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) {
CustomValue retVal = null;
// Get the text from the JSON
String text = null;
try {
text = StringUtils.upperCase(jsonParser.getText());
} catch (IOException e) {
e.printStackTrace();
text = "NULL";
}
System.out.println("TEXT: " + text);
// If the text is empty or null, make it NULL
if (StringUtils.isBlank(text)) {
text = "NULL";
}
// Based on the text value, return the appropriate retVal
switch (text) {
case "Case 1":
retVal = CustomValue.CASE1;
break;
case "Case 2":
retVal = CustomValue.CASE2;
break;
case "NULL":
retVal = CustomValue.NULL;
break;
case "*":
retVal = CustomValue.WILDCARD;
break;
default:
retVal = CustomValue.NULL;
break;
}
return retVal;
}
}
答案 0 :(得分:0)
JsonDeserializer.deserialize的JavaDoc声明如下:
“ ...请注意,从未为JSON空文字调用此方法,因此反序列化器不需要(也不应该)对其进行检查。”
Jackson自己处理null
的值,并且不会调用自定义反序列化器的deserialize
。要自定义为null
返回的值,必须重写解串器的getNullValue
方法。