es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe una forma incorporada de deserializar Map en Jackson?

La API está devolviendo una matriz de entradas de mapas como esta:

[
    {"key": "Key1", "value": "Value1"},
    {"key": "Key2", "value": "Value2"},
    {"key": "Key3", "value": "Value3"},
    ...
]

Y me gustaría deserializarlo directamente en un Map<string, string="">, de manera que se convierta en:

Map<string, string=""> {Key1->Value1, Key2->Value2, Key3->Value3}

La solución obvia es deserializar como List<apimapentry>, ¿pero tal vez hay una forma más sencilla de hacerlo?

Lo que estoy haciendo ahora:

@JsonProperty
public void setMyTargetMap(List<apimapentrywrapper> wrappers) {
    this.myTargetMap = wrappers.stream().collect(Collectors.toMap(ApiMapEntryWrapper::getKey, ApiMapEntryWrapper::getValue));
}

class ApiMapEntryWrapper {
    private String key;
    private String value;
}

Mientras que lo que estaría buscando sería algo como (haciendo referencia al ejemplo de JSON) sin necesidad de ApiMapEntryWrapper:

java
@JsonMap(keyName="key", valueName="value")
private Map<string, strin=""> myTargetMap;
</string,></string,></string,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en Java, Spring y Jackson, sugiero la siguiente solución para deserializar directamente la respuesta de la API en Map<string,string> sin la necesidad de ApiMapEntryWrapper:

    public class ApiMapEntry {
        private String key;
        private String value;
    
        // getters y setters
    }
    
    public class ApiResponse {
        private List<apimapentry> entries;
    
        // getter y setter
    
        public Map<string, string=""> toMap() {
            return entries.stream()
                .collect(Collectors.toMap(ApiMapEntry::getKey, ApiMapEntry::getValue));
        }
    }
    

    Con este código, puede utilizar Jackson para deserializar el JSON y luego llamar al método toMap() para obtener un Map<string,string>:

    String json = "..." // el JSON de la respuesta de la API
    ObjectMapper objectMapper = new ObjectMapper();
    ApiResponse response = objectMapper.readValue(json, ApiResponse.class);
    Map<string, string=""> myTargetMap = response.toMap();
    

    El método toMap() utiliza flujos de Java 8 para convertir la lista de objetos ApiMapEntry en un Map<string,string>. Este enfoque evita la necesidad de una clase intermedia ApiMapEntryWrapper y proporciona una solución concisa y legible.</string,string></string,></string,string></string,></string,string>

Comments are closed.