Java 使用Google Gson映射Mongo id字段

Java 使用Google Gson映射Mongo id字段,java,gson,Java,Gson,我正在阅读MongoDB中包含其唯一标识符的文档: { "_id" : ObjectId("5526888bd3d56a86cea8ea12"), "name" : "user1" } 我想用一个java类来映射它 public class Mapper { Object _id; String name; } 由于我的fromJson执行: Mapper m = gson.fromJson(string, Mapper.class); …存储在_id字段中

我正在阅读MongoDB中包含其唯一标识符的文档:

{
    "_id" : ObjectId("5526888bd3d56a86cea8ea12"),
    "name" : "user1"
}
我想用一个java类来映射它

public class Mapper {
    Object _id;
    String name;
}
由于我的fromJson执行:

Mapper m = gson.fromJson(string, Mapper.class);
…存储在_id字段中的值是
{$oid=5526888bd3d56a86cea8ea12}
。我想在其中存储id字符串。(例如
“5526888bd3d56a86cea8ea12”

Gson能自动帮我吗


谢谢

您可以注册一个自定义适配器,告诉解析器您只想获取字符串值中括号和引号之间的值(请注意,id现在是
映射器
类中的字符串)。可以更改正则表达式以匹配生成的ids要求

class MapperAdapter implements JsonDeserializer<Mapper> {

    private static final Pattern p = Pattern.compile("\\(\"([a-zA-Z\\d]+)\"\\)");

    @Override
    public Mapper deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonObject jObj = json.getAsJsonObject();
        String id = jObj.get("_id").getAsString();
        String name = jObj.get("name").getAsString();

        Matcher m = p.matcher(id);
        if(!m.find()) {
            throw new IllegalArgumentException("The id should be within parenthesis and quotes.");
        }
        return new Mapper(m.group(1), name);
    }
}
这将产生以下输出:

Mapper{id=5526888bd3d56a86cea8ea12, name=user1}

谢谢分享这个很棒的提示!
Mapper{id=5526888bd3d56a86cea8ea12, name=user1}