Patrzyłem na Jacksona, ale wygląda na to, że musiałbym przekonwertować mapę na JSON, a następnie wynikowy JSON na POJO.
Czy istnieje sposób przekonwertowania mapy bezpośrednio na POJO?
json
dictionary
jackson
pojo
użytkownik86834
źródło
źródło
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.3'
Map<String, Object>
instancję?Rozwiązanie z Gsonem :
źródło
map.toString()
zapewni prawidłowy ciąg znaków? ImplementacjatoString()
nie gwarantuje określonego formatu.Tak, zdecydowanie można uniknąć pośredniej konwersji na JSON. Korzystanie z narzędzia do głębokiego kopiowania, takiego jak Dozer , możesz przekonwertować mapę bezpośrednio na POJO. Oto uproszczony przykład:
Przykład POJO:
Przykładowy kod konwersji:
Wynik:
Uwaga: Jeśli zmienisz mapę źródłową na
Map<String, Object>
a, możesz skopiować dowolnie zagnieżdżone właściwości (zMap<String, String>
jednym poziomem).źródło
jeśli masz ogólne typy w swojej klasie, powinieneś używać
TypeReference
zconvertValue()
.Możesz także użyć tego do konwersji pojo na
java.util.Map
powrót.źródło
Testowałem zarówno Jacksona, jak i BeanUtils i odkryłem, że BeanUtils jest znacznie szybszy.
Na moim komputerze (Windows 8.1, JDK1.7) mam ten wynik.
źródło
Map
zawieramap.put("data","2016-06-26")
iTestClass
ma poleprivate LocalDate data;
, wtedy Jackson byłby w stanie załatwić sprawę, podczas gdy BeanUtils zawiedzie.ObjectMapper
instancji jest procesem pochłaniającym czas / zasoby i zaleca się ponowne użycie jednej instancji mapowania zamiast tworzenia jej za każdym razem za każdym razem. Myślę, że lepiej byłoby wyjąć go z testuOdpowiedzi udzielone do tej pory za pomocą Jacksona są tak dobre, ale nadal możesz mieć funkcję util, która pomoże Ci przekonwertować różne
POJO
s w następujący sposób:źródło
Klasa User POJO
App.class testuje przykład
źródło
@Hamedz, jeśli korzystasz z wielu danych, użyj Jacksona do konwersji lekkich danych, użyj apache ... TestCase:
źródło