Eu estive olhando para Jackson, mas parece que eu teria que converter o mapa em JSON e, em seguida, o JSON resultante no POJO.
Existe uma maneira de converter um mapa diretamente em um POJO?
json
dictionary
jackson
pojo
user86834
fonte
fonte
compile 'com.fasterxml.jackson.core:jackson-databind:2.7.3'
Map<String, Object>
instância?Uma solução com o Gson :
fonte
map.toString()
que fornecerá a string correta? Uma implementação detoString()
não garante um formato específico.Sim, é definitivamente possível evitar a conversão intermediária para JSON. Usando uma ferramenta de cópia profunda como o Dozer, você pode converter o mapa diretamente em um POJO. Aqui está um exemplo simplista:
Exemplo POJO:
Código de conversão de exemplo:
Resultado:
Nota: Se você alterar o mapa de origem para um
Map<String, Object>
, poderá copiar propriedades aninhadas arbitrariamente profundas (comMap<String, String>
apenas um nível).fonte
Se você tem tipos genéricos em sua classe, deve usar
TypeReference
comconvertValue()
.Além disso, você pode usar isso para converter um pojo para
java.util.Map
trás.fonte
Testei Jackson e BeanUtils e descobri que o BeanUtils é muito mais rápido.
Na minha máquina (Windows8.1, JDK1.7), obtive este resultado.
fonte
Map
contémmap.put("data","2016-06-26")
eTestClass
tem um campoprivate LocalDate data;
, então Jackson seria capaz de fazer as coisas, enquanto o BeanUtils falhará.ObjectMapper
instância é um processo que consome tempo / recursos e é recomendável reutilizar uma instância do mapeador em vez de criá-la novamente a cada vez. Eu acho que seria melhor para tirá-lo do lop testeAs respostas fornecidas até o momento usando Jackson são muito boas, mas você ainda pode ter uma função util para ajudá-lo a converter diferentes
POJO
s da seguinte maneira:fonte
User.class POJO
A classe App.class testa o exemplo
fonte
@ Hamedz se usar muitos dados, use Jackson para converter dados leves, use apache ... TestCase:
fonte