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

2022-08-31 10:35:25

假设我有一个非常简单的java对象,它只有一些getXXX和setXXX属性。此对象仅用于处理值,基本上是记录或类型安全(和高性能)映射。我经常需要将此对象隐藏为键值对(字符串或类型安全),或者从键值对转换为此对象。

除了反射或手动编写代码来执行此转换之外,实现此转换的最佳方法是什么?

例如,在不使用 ObjectMes 类型的情况下,通过 jms 发送此对象(或将传入消息转换为正确类型的对象)。


答案 1

很多潜在的解决方案,但让我们再添加一个。使用 Jackson(JSON processing lib)进行“json-less”转换,例如:

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。


答案 2

总是有apache commons beanutils,但当然它使用引擎盖下的反射