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

如何将Java对象(bean)转换为键值对(反之亦然)?

如何将Java对象(bean)转换为键值对(反之亦然)?

慕田峪4524236 2019-12-16 10:31:58
说我有一个非常简单的java对象,它仅具有一些getXXX和setXXX属性。该对象仅用于处理值,基本上是记录或类型安全(和性能)映射。我经常需要将此对象转换为键值对(字符串或类型安全)或从键值对转换为该对象。除了反射或手动编写代码以进行此转换之外,实现此目的的最佳方法是什么?一个示例可能是通过jms发送此对象,而不使用ObjectMessage类型(或将传入消息转换为正确的对象)。如何将Java对象(bean)转换为键值对(反之亦然)?
查看完整描述

4 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

总是有apache commons beanutils,但是当然它在后台使用了反射


查看完整回答
反对 回复 2019-12-16
?
慕容森

TA贡献1853条经验 获得超18个赞

许多潜在的解决方案,但让我们再添加一个。使用Jackson(JSON处理库)进行“无json”转换,例如:


ObjectMapper m = new ObjectMapper();

Map<String,Object> props = m.convertValue(myBean, Map.class);

MyBean anotherBean = m.convertValue(props, MyBean.class);

(此博客条目有更多示例)


您基本上可以转换任何兼容的类型:兼容的意思是,如果您确实从类型转换为JSON,并且从该JSON转换为结果类型,则条目将匹配(如果配置正确,也可以忽略无法识别的类型)。


对于可能发生的情况,包括Maps,Lists,数组,基元和类bean POJO,效果很好。


查看完整回答
反对 回复 2019-12-16
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

这是一种将Java对象转换为Map的方法


public static Map<String, Object> ConvertObjectToMap(Object obj) throws 

    IllegalAccessException, 

    IllegalArgumentException, 

    InvocationTargetException {

        Class<?> pomclass = obj.getClass();

        pomclass = obj.getClass();

        Method[] methods = obj.getClass().getMethods();



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

        for (Method m : methods) {

           if (m.getName().startsWith("get") && !m.getName().startsWith("getClass")) {

              Object value = (Object) m.invoke(obj);

              map.put(m.getName().substring(3), (Object) value);

           }

        }

    return map;

}

这是怎么称呼的


   Test test = new Test()

   Map<String, Object> map = ConvertObjectToMap(test);


查看完整回答
反对 回复 2019-12-16
  • 4 回答
  • 0 关注
  • 1665 浏览

添加回答

举报

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