He estado mirando a Jackson, pero parece que tendría que convertir el Mapa a JSON, y luego el JSON resultante al POJO.
¿Hay alguna manera de convertir un mapa directamente en un POJO?
json
dictionary
jackson
pojo
usuario86834
fuente
fuente
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.3'
Map<String, Object>
instancia?Una solución con Gson :
fuente
map.toString()
que proporcionará la cadena correcta? Una implementación detoString()
no garantiza un formato específico.Sí, definitivamente es posible evitar la conversión intermedia a JSON. Usando una herramienta de copia profunda como Dozer , puede convertir el mapa directamente en un POJO. Aquí hay un ejemplo simplista:
Ejemplo de POJO:
Código de conversión de muestra:
Salida:
Nota: Si cambia su mapa de origen a a
Map<String, Object>
, puede copiar propiedades anidadas arbitrariamente profundas (conMap<String, String>
solo obtener un nivel).fuente
si usted tiene los tipos genéricos en su clase se debe utilizar
TypeReference
conconvertValue()
.También puede usar eso para convertir un pojo a la
java.util.Map
espalda.fuente
He probado Jackson y BeanUtils y descubrí que BeanUtils es mucho más rápido.
En mi máquina (Windows8.1, JDK1.7) obtuve este resultado.
fuente
Map
contienemap.put("data","2016-06-26")
yTestClass
tiene un campoprivate LocalDate data;
, entonces Jackson podría hacer las cosas, mientras que BeanUtils fallará.ObjectMapper
instancia es un proceso que consume tiempo / recursos, y se recomienda reutilizar una instancia del mapeador en lugar de crearla nuevamente cada vez. Creo que sería mejor sacarlo delLas respuestas proporcionadas hasta ahora con Jackson son muy buenas, pero aún así podría tener una función util para ayudarlo a convertir diferentes correos electrónicos de la
POJO
siguiente manera:fuente
User.class POJO
El App.class prueba el ejemplo
fuente
@Hamedz si usa muchos datos, use Jackson para convertir datos de luz, use apache ... TestCase:
fuente