MismatchedInputException 时如何设置空值?

How to set the null value when an MismatchedInputException?

我有一个这样的 class ;

public class User  {
  public String username;
  public String password;
}

json

{"username": "test","password": [1,2,3,4,5,6,7,8,8,9]}

当我运行这段代码时;

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
User user = objectMapper.readValue(json, User.class);

抛出异常;

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.lang.String` from Array value (token `JsonToken.START_ARRAY`)

但我只想得到这样的用户;

  username=test;
  password=null;

我该怎么办?

您可以尝试注册自定义com.fasterxml.jackson.databind.deser.DeserializationProblemHandler。如果你想读取 String 但你有一个数组,你可以 return null。简单实现:

objectMapper.addHandler(new DeserializationProblemHandler() {
    @Override
    public Object handleUnexpectedToken(DeserializationContext ctxt, JavaType targetType, JsonToken t, JsonParser p, String failureMsg) throws IOException {
        if (targetType.getRawClass() == String.class && t == JsonToken.START_ARRAY) {
            return null;
        }
        return super.handleUnexpectedToken(ctxt, targetType, t, p, failureMsg);
    }
});