J'ai regardé Jackson, mais il semble que je devrais convertir la carte en JSON, puis le JSON résultant en POJO.
Existe-t-il un moyen de convertir directement une carte en POJO?
json
dictionary
jackson
pojo
user86834
la source
la source
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.3'
Map<String, Object>
instance?Une solution avec Gson :
la source
map.toString()
fournir la chaîne correcte? Une implémentation detoString()
ne garantit pas un format spécifique.Oui, il est certainement possible d'éviter la conversion intermédiaire en JSON. En utilisant un outil de copie profonde comme Dozer, vous pouvez convertir la carte directement en POJO. Voici un exemple simpliste:
Exemple POJO:
Exemple de code de conversion:
Production:
Remarque: Si vous modifiez votre carte source en a,
Map<String, Object>
vous pouvez copier des propriétés imbriquées arbitrairement profondes (avecMap<String, String>
vous n'obtenez qu'un seul niveau).la source
si vous avez des types génériques dans votre classe, vous devez utiliser
TypeReference
avecconvertValue()
.Vous pouvez également l'utiliser pour convertir un pojo en
java.util.Map
dos.la source
J'ai testé Jackson et BeanUtils et j'ai découvert que BeanUtils est beaucoup plus rapide.
Dans ma machine (Windows8.1, JDK1.7) j'ai obtenu ce résultat.
la source
Map
contientmap.put("data","2016-06-26")
etTestClass
a un champprivate LocalDate data;
, alors Jackson serait capable de faire avancer les choses, tandis que BeanUtils échouera.ObjectMapper
instance est un processus qui prend du temps et des ressources, et il est recommandé de réutiliser une instance de mappeur au lieu de la créer à nouveau à chaque fois. Je pense qu'il serait préférable de le sortir du test lopLes réponses fournies jusqu'à présent en utilisant Jackson sont si bonnes, mais vous pouvez quand même avoir une fonction util pour vous aider à convertir différents
POJO
s comme suit:la source
User.class POJO
L'App.class teste l'exemple
la source
@Hamedz si vous utilisez beaucoup de données, utilisez Jackson pour convertir des données lumineuses, utilisez apache ... TestCase:
la source