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);
}
});
我有一个这样的 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);
}
});