No se puede construir instancia de java.util.LinkedHashMap: ninguna cadena-argumento del constructor / fábrica

user6597131:

Se enfrentan a problemas al analizar un archivo y convertir en POJO. A continuación excepción que estoy recibiendo.

com.fasterxml.jackson.databind.JsonMappingException: No se puede construir instancia de java.util.LinkedHashMap: ningún método String-argumento del constructor / deserializar fábrica del valor de cadena ( '{\ "hosturl_path \": \ "/ images \"} ')

archivo JSON de la muestra:

{"test": [{
     "a112a": "testhost", 
     "a112b": "{\"hosturl_path\":\"/images\"}"
}]}

POJO -

import java.io.Serializable;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY, getterVisibility = JsonAutoDetect.Visibility.ANY,
        setterVisibility = JsonAutoDetect.Visibility.ANY)
public class TestPojo implements Serializable
{
    private static final long serialVersionUID = 638312139361412L;

    @JsonProperty("a112a")
    private String host;

    @JsonProperty("a112b")
    private Map<String,String> parameterMap;

    public TestPojo()
    {
    }

    public TestPojo(String host, Map<String, String> parameterMap)
    {
        this.host = host;
        this.parameterMap = parameterMap;
    }

    public String getHost()
    {
        return host;
    }

    public void setHost(String host)
    {
        this.host = host;
    }

    public Map<String, String> getParameterMap()
    {
        return parameterMap;
    }

    public void setParameterMap(Map<String, String> parameterMap)
    {
        this.parameterMap = parameterMap;
    }
}

Clase principal

import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;


public class TestApp
{
    public static void main(String[] args) throws IOException
    {
        ObjectMapper mapper = new ObjectMapper();

        String fileName = "sampleFile.json";

        URL resource = TestApp.class.getResource(fileName);

        Map<String,List<TestPojo>> map = mapper.readValue(resource, new
                TypeReference<Map<String, List<TestPojo>>>()
                {
                });

        System.out.println(map);
    }
}
shinjw:

Su excepción le está diciendo exactamente lo que está pasando aquí.

com.fasterxml.jackson.databind.JsonMappingException: No se puede construir instancia de java.util.LinkedHashMap: ningún método String-argumento del constructor / deserializar fábrica del valor de cadena ( '{\ "hosturl_path \": \ "/ images \"} ')

En su TestPojo.class, que intenta deserializar una Stringen una Map.

@JsonProperty("a112b")
private Map<String,String> parameterMap;

Si se va a ajustar esto a su TestPojo.class

@JsonProperty("a112b")
private String parameterMap;

Obtendrá una carrera exitosa. Sin embargo, me imagino que esto no es el comportamiento deseado. Si usted tiene la capacidad de cambiar de sampleFileJackson debe ser capaz de deserializar eso correctamente.

{"test": [{
 "a112a": "testhost", 
 "a112b": {"hosturl_path":"images"}
}]}

De otra manera. Tendrá que especificar un deserializer personalizado.

@JsonDeserialize(CustomParameterDeserializer.class)
@JsonProperty("a112b")
private Map<String,String> parameterMap;

Supongo que te gusta

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