java - 将 POJO 转换为 Map

标签 java json gson stripe-payments

<分区>

我有以下内容:

public class ChargeRequest {
    @Expose
    private String customerName;
    @Expose
    private String stripeToken;
    @Expose
    private String plan;
    @Expose
    private String[] products;

    gettersAndSetters()...

    public Map<String, Object> toMap() {
        return gson.fromJson(this, new TypeToken<Map<String, Object>>() {
        }.getType());
    }

    public String toString() {
        return gson.toJson(this, getClass());
    }
}

我正在尝试转换 ChargeRequest进入Map<String, Object>与 Gson。

我的适配器:

public static class JsonAdapter implements  JsonDeserializer<ChargeRequest>{
        @Override
        public ChargeRequest deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
            ChargeRequest cr = new ChargeRequest();
            JsonObject o = json.getAsJsonObject();
            o.add("customerName", o.get("customerName"));
            o.add("stripeToken", o.get("stripeToken"));
            o.add("plan", o.get("plan"));
            JsonArray jProds = o.get("products").getAsJsonArray();
            cr.products = new String[jProds.size()];
            for (int i = 0; i < jProds.size(); i++) {
                cr.products[i] = jProds.get(i).getAsString();
            }
            return cr;
        }
}

我得到:Type information is unavailable, and the target is not a primitive对于字符串数组。怎么了?

最后更新:我终于决定搬回 jackson ,一切都按预期进行。

代码:

ObjectMapper om = new ObjectMapper();
Map<String, Object> req = om.convertValue(request, Map.class);

最佳答案

发布一个简单的版本:

public final static Map<String, Object> pojo2Map(Object obj) {
    Map<String, Object> hashMap = new HashMap<String, Object>();
    try {
        Class<? extends Object> c = obj.getClass();
        Method m[] = c.getMethods();
        for (int i = 0; i < m.length; i++) {
            if (m[i].getName().indexOf("get") == 0) {
                String name = m[i].getName().toLowerCase().substring(3, 4) + m[i].getName().substring(4);
                hashMap.put(name, m[i].invoke(obj, new Object[0]));
            }
        }
    } catch (Throwable e) {
        //log error
    }
    return hashMap;
}

关于java - 将 POJO 转换为 Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40502475/

相关文章:

java - 重载具有不同访问修饰符、返回类型和参数的方法是否仍然被视为重载?

java - 需要有关密码检查程序的帮助

php - json_decode() 函数不返回任何内容

java - Android - 使用 GSON 解析 JSON

android - 在android中使用kotlin将字符串化的json转换为jsonArray

java - Spring 应用程序最简单的 main() 方法是什么?

java - 使用 xpath 轴在 Selenium 中遍历 DOM

javascript - DateTimePicker - 添加给定时间段内的天数

C# 不四舍五入

java - 将 ZonedDateTime 类型转换为 Gson