Jackson JSON - Deserialize Commons MultiMap

Quiero serializar y deserializar un MultiMap (Apache Commons 4) usando JSON.

Pieza de código para probar:

MultiMap<String, String> map = new MultiValueMap<>();
map.put("Key 1", "Val 11");
map.put("Key 1", "Val 12");
map.put("Key 2", "Val 21");
map.put("Key 2", "Val 22");

ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(map);
MultiMap<String, String> deserializedMap = mapper.readValue(jsonString, MultiValueMap.class);

La serialización funciona bien y da como resultado un formato que esperaría:

{"Key 1":["Val 11","Val 12"],"Key 2":["Val 21","Val 22"]}

Desafortunadamente, la deserialización produce un resultado que no es como debería verse: después de la deserialización, el Multimap contiene una ArrayList dentro de una ArrayList para los valores de una clave, no una sola ArrayList para la clave que contiene los valores.

Este resultado se produce debido al hecho de que put()se llama al método del mapa múltiple para agregar la matriz que se encuentra en la cadena json, ya que MultiMap implementa la interfaz del Mapa.

La implementación de MultiMap nuevamente crea una ArrayList si un nuevo valor se asigna a una clave no existente.

¿Hay alguna forma de evitar esto?

¡Gracias por tu ayuda!

Respuesta 1

Tengo la siguiente clase en mi actividad de fragmentos ahora, quiero obtener el nombre de las pestañas de strings.xml pero no puedo usar el método getString (int resId) me da un mensaje de error "No se puede hacer una estática ...

Me gustaría reemplazar algunos elementos en un archivo, en base a algunas expresiones regulares. Para hacer eso: leo la línea del archivo por línea. Para cada línea, verifico la expresión regular y realizo ...

¿Cómo puedo verificar qué clase ha llamado a mi método? Por ejemplo: si la Clase A usa el Método B en la Clase C, la función debería hacer algo más de lo que haría la función, si la Clase B llama al ...

Me gustaría poder activar la ejecución de una tarea de Gradle justo después de que IDEA importe mis proyectos. Actualmente, estoy intentando trabajar con IDEA-96615 y GRADLE-2198, pero tengo otros casos de uso, ...