为了账号安全,请及时绑定邮箱和手机立即绑定

将Map <String,String>转换为POJO

/ 猿问

将Map <String,String>转换为POJO

BIG阳 2019-08-31 15:28:05

我一直在看杰克逊,但似乎我必须将Map转换为JSON,然后将结果JSON转换为POJO。


有没有办法将Map直接转换为POJO?


查看完整描述

3 回答

?
白衣非少年

嗯,你也可以用杰克逊实现这一点。(因为你考虑使用杰克逊,它似乎更舒服)。


使用ObjectMapper的convertValue方法:


final ObjectMapper mapper = new ObjectMapper(); // jackson's objectmapper

final MyPojo pojo = mapper.convertValue(map, MyPojo.class);

无需转换为JSON字符串或其他内容; 直接转换的速度要快得多。


查看完整回答
反对 回复 2019-08-31
?
慕粉4167745

Gson的解决方案:


Gson gson = new Gson();

JsonElement jsonElement = gson.toJsonTree(map);

MyPojo pojo = gson.fromJson(jsonElement, MyPojo.class);


查看完整回答
反对 回复 2019-08-31
?
九州编程

我测试了Jackson和BeanUtils,发现BeanUtils要快得多。

在我的机器(Windows8.1,JDK1.7)中,我得到了这个结果。


BeanUtils t2-t1 = 286

Jackson t2-t1 = 2203



public class MainMapToPOJO {


public static final int LOOP_MAX_COUNT = 1000;


public static void main(String[] args) {

    Map<String, Object> map = new HashMap<>();

    map.put("success", true);

    map.put("data", "testString");


    runBeanUtilsPopulate(map);


    runJacksonMapper(map);

}


private static void runBeanUtilsPopulate(Map<String, Object> map) {

    long t1 = System.currentTimeMillis();

    for (int i = 0; i < LOOP_MAX_COUNT; i++) {

        try {

            TestClass bean = new TestClass();

            BeanUtils.populate(bean, map);

        } catch (IllegalAccessException e) {

            e.printStackTrace();

        } catch (InvocationTargetException e) {

            e.printStackTrace();

        }

    }

    long t2 = System.currentTimeMillis();

    System.out.println("BeanUtils t2-t1 = " + String.valueOf(t2 - t1));

}


private static void runJacksonMapper(Map<String, Object> map) {

    long t1 = System.currentTimeMillis();

    for (int i = 0; i < LOOP_MAX_COUNT; i++) {

        ObjectMapper mapper = new ObjectMapper();

        TestClass testClass = mapper.convertValue(map, TestClass.class);

    }

    long t2 = System.currentTimeMillis();

    System.out.println("Jackson t2-t1 = " + String.valueOf(t2 - t1));

}}


查看完整回答
反对 回复 2019-08-31
  • 3 回答
  • 0 关注
  • 172 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信