Asignación de una cadena JSON a un objeto con Jackson lanzará MismatchedInputException

Al Phaba :

Tengo una clase simple

public class AuthenticationToken {

    public String token;

    public AuthenticationToken(String token) {
        this.token = token;
    }

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }
}

Con Jackson que estoy tratando de asignar una cadena a este objeto como éste

private String input = "{\"token\":\"adf\"}";


@Test
public void whenJsonString_ThenCreateAuthenticationObject() throws IOException {

    ObjectMapper jsonMapper = new ObjectMapper();
    AuthenticationToken tokenObject = jsonMapper.readValue(input, AuthenticationToken.class);
    assertThat(tokenObject).isNotNull();
}

Pero arroja la siguiente excepción

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `foo.AuthenticationToken` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)"{"token":"adf"}"; line: 1, column: 2]

Traté de anotar la propiedad en mi AuthenticationToken como @JsonProperty pero esto también dio lugar en esta excepción.

TA:

Jackson será por defecto esperar un " vacío constructor" y llenará automáticamente su objeto por los captadores y definidores que se proporcionan para cada campo.

Por lo tanto la eliminación de los argumentos de su constructor ya se va a resolver su problema:

public class AuthenticationToken {

    public String token;

    public AuthenticationToken() {}

    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }
}

También puede simplemente añadir un constructor vacío adicional si desea mantener su actual tal como es. Probado ambas opciones para su caso de prueba, ambos funcionan bien.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=210752&siteId=1
Recomendado
Clasificación