JsonDeserializer不处理空值

时间:2020-06-04 13:39:40

标签: java jackson

我无法让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;
    }
}

1 个答案:

答案 0 :(得分:0)

JsonDeserializer.deserialize的JavaDoc声明如下:

“ ...请注意,从未为JSON空文字调用此方法,因此反序列化器不需要(也不应该)对其进行检查。”

Jackson自己处理null的值,并且不会调用自定义反序列化器的deserialize。要自定义为null返回的值,必须重写解串器的getNullValue方法。

相关问题