¿Cómo puedo serializar una propiedad que es un mapa como una lista de los valores del mapa? He podido hacer otras conversiones simples usando la anotación @JsonSerialize(using=...)
en el getter. Sin embargo, no estoy seguro si existe uno para lo que quiero hacer.Cómo serializar un mapa como lista usando Jackson
8
A
Respuesta
7
necesitábamos algo similar, en nuestro caso se utilizó un personalizado @JsonSerialize
como te comento, y que era estúpido simple:
public class MyCustomSerializer extends JsonSerializer<Map<?, ?>> {
@Override
public void serialize(final Map<?, ?> value, final JsonGenerator jgen, final SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeObject(value.values());
}
}
Código de usarlo:
import java.io.IOException;
import java.util.Collections;
import java.util.Map;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.annotate.JsonSerialize;
public class JacksonTest {
public static class ModelClass {
private final Map<String, String> map;
public ModelClass(final Map<String, String> map) {
super();
this.map = map;
}
@JsonSerialize(using = MyCustomSerializer.class)
public Map<String, String> getMap() {
return map;
}
}
public static void main(final String[] args) throws JsonGenerationException, JsonMappingException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writeValue(System.out, new ModelClass(Collections.singletonMap("test", "test")));
}
}
3
que implementa utilizando por defecto Serializador para manejar valores que no son solo String:
@Override
public void serialize(final Map<Long, ?> value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException,
JsonProcessingException {
provider.defaultSerializeValue(value.values(), jgen);
}
EDITAR: Como mencionó Radu Simionescu, esta solución solo funciona para Maps of Pojos.
Cuestiones relacionadas
- 1. ¿Cómo puedo serializar este JSON utilizando las anotaciones de Jackson?
- 2. ¿Cómo serializar un mapa de un mapa con GSON?
- 3. Lista Serialize [Cualquier] a/de JSON en Scala usando Jackson
- 4. serialización de la lista compleja de Jackson
- 5. cómo serializar largo a la secuencia con jackson?
- 6. ¿Puedo serializar el mapa de STL en MFC usando CArchive?
- 7. ¿Cómo serializar un Mapa <String, String> usando Simple XML?
- 8. Usando Jackson ObjectMapper para serializar el nombre de subclase en JSON, no es la superclase
- 9. lista como valor del mapa en griales
- 10. JSON Serializar JDK proxy dinámico con la biblioteca de Jackson
- 11. deserializar que no son cadenas claves mapa con Jackson
- 12. Jackson: ¿hay alguna forma de serializar POJO directamente a treemodel?
- 13. ¿Cómo serializar una lista en AutoBean (GWT)?
- 14. cómo serializar Lista <object>
- 15. ¿Cómo crear esta cadena json usando Jackson?
- 16. Cómo deserializar el siguiente JSON usando Jackson
- 17. ¿Cómo serializar/deserializar un hashmap?
- 18. Serialized JSON con claves clasificadas, usando Jackson
- 19. ¿Cómo serializar una lista en java?
- 20. Serializar un mapa que no tiene una cadena como clave con lift-json
- 21. JAXB a JSON usando JACKSON
- 22. ¿Cómo serializar ExpandoObject usando ServiceStack JsonSerializer?
- 23. ¿Cómo serializar un paquete?
- 24. Serializar un variables_map
- 25. Definir un mapa como constante en java
- 26. ¿Cómo se instruye a Jackson para serializar un campo dentro de un Objeto en lugar del Objeto mismo?
- 27. Crear estructura JSON simple usando Jackson
- 28. Jackson Deserialize variable como JSON cadena
- 29. cómo iterar una lista como Lista <Mapa <Cadena, Objeto >>
- 30. Cómo evitar que valores nulos dentro de un mapa y campos nulos dentro de un bean sean serializados a través de Jackson
sí, lo hizo, y podría haber funcionado en su caso, pero no funciona con mapas y colecciones, pero solo con pojos. no hay provider.defaultSerializeMap desafortunadamente –