Я смотрел на Джексона, но, похоже, мне пришлось бы преобразовать карту в JSON, а затем полученный JSON в POJO.
Есть ли способ конвертировать карту непосредственно в POJO?
json
dictionary
jackson
pojo
user86834
источник
источник
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.3'
Map<String, Object>
экземпляр?Решение с помощью Gson :
источник
map.toString()
будет ли правильная строка? РеализацияtoString()
не гарантирует определенный формат.Да, безусловно, можно избежать промежуточного преобразования в JSON. Используя инструмент глубокого копирования, такой как Dozer, вы можете конвертировать карту непосредственно в POJO. Вот упрощенный пример:
Пример POJO:
Пример кода конверсии:
Вывод:
Примечание. Если вы измените исходную карту на a,
Map<String, Object>
то сможете скопировать произвольно глубокие вложенные свойства (при этомMap<String, String>
вы получите только один уровень).источник
если у вас есть общие типы в вашем классе, вы должны использовать
TypeReference
сconvertValue()
.Также вы можете использовать это для преобразования Pojo в
java.util.Map
спину.источник
Я протестировал Jackson и BeanUtils и обнаружил, что BeanUtils намного быстрее.
В моей машине (Windows8.1, JDK1.7) я получил этот результат.
источник
Map
содержитmap.put("data","2016-06-26")
иTestClass
имеет полеprivate LocalDate data;
, тогда Джексон сможет добиться цели, в то время как BeanUtils потерпит неудачу.ObjectMapper
экземпляра - это процесс, требующий много времени и ресурсов, и рекомендуется повторно использовать один экземпляр Mapper вместо того, чтобы каждый раз создавать его заново. Я думаю, что было бы лучше вынуть его из тестовогоОтветы, предоставленные до сих пор с использованием Джексона, настолько хороши, но, тем не менее, у вас может быть функция util, которая поможет вам конвертировать различные
POJO
s следующим образом:источник
User.class POJO
App.class протестировать пример
источник
@Hamedz, если использовать много данных, использовать Джексона для преобразования легких данных, использовать Apache ... TestCase:
источник