How to set the null value when an MismatchedInputException?

Viewed 261

I Have a class like this ;

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

json

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

When I run this code ;

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

It throw an exception;

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

But I just want get a user like this;

  username=test;
  password=null;

What should I do?

1 Answers

You can try to register custom com.fasterxml.jackson.databind.deser.DeserializationProblemHandler. In case you want to read a String but you have an array you can return null. Simple implementation:

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);
    }
});
Related