Comment désérialiser une Map<String, Object> dans POJO?

J'ai une Map<String, Object> qui contient un désérialisé forme de JSON. Je tiens à désérialiser ce dans les champs d'un POJO.

Je peux réaliser cela à l'aide de Gson par la sérialisation de la Carte dans une chaîne JSON et puis la désérialisation de la chaîne JSON dans le POJO, mais c'est inefficace (voir exemple ci-dessous). Comment puis-je faire cela sans l'étape intermédiaire?

La solution doit, de préférence, utiliser Gson ou Jackson, car ils sont déjà en cours d'utilisation par le projet.

Exemple de code:

import java.util.HashMap;
import java.util.Map;

import com.google.gson.Gson;

public class Test {
    public static void main(String[] args) {
        Map<String, Object> innermap = new HashMap<String, Object>();
        innermap.put("number", 234);
        innermap.put("string", "bar");
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("number", 123);
        map.put("string", "foo");
        map.put("pojo2", innermap);

        Gson gson = new Gson();

        //How to perform this without JSON serialization?
        String json = gson.toJson(map);
        MyPojo pojo = gson.fromJson(json, MyPojo.class);

        System.out.println(pojo);
    }
}


class MyPojo {
    private int number;
    private String string;
    private MyPojo pojo2;

    @Override
    public String toString() {
        return "MyPojo[number=" + number + ", string=" + string + ", pojo2=" + pojo2 + "]";
    }
}

OriginalL'auteur Sampo | 2014-08-22