Java 如何将具有平面属性的贴图(prop1.prop2.prop3)转换为POJO

Java 如何将具有平面属性的贴图(prop1.prop2.prop3)转换为POJO,java,jackson,type-conversion,mapping,pojo,Java,Jackson,Type Conversion,Mapping,Pojo,我有以下用例: 我正在使用属性映射: Map <String, String[]> args = new HashMap(){{ put("requester.firstName", "Alice"); put("requester.lastName", "Smith"); put("requester.address", "Glasgow Av"); put("publication.type", "print"); put("publication.subtype", "book

我有以下用例:

我正在使用属性映射:

Map <String, String[]> args = new HashMap(){{
put("requester.firstName", "Alice");
put("requester.lastName", "Smith");
put("requester.address", "Glasgow Av");
put("publication.type", "print");
put("publication.subtype", "book");
}};
我可以用Jackson来运行转换吗?如果不是,什么样的图书馆最适合这个

谢谢


Nadiia

您可能可以使用apache common的
BeanUtils
。该框架能够几乎立即从
map
映射到bean

Map<String,String> yourMap = new HashMap<String,String>();
yourMap.put("name", "Joan");
yourMap.put("age", "30");

YourBean p = new YourBean();

try {
    BeanUtils.populate(p, yourMap);
}  catch (Throwable e) {
    //do something...
}
Map yourMap=newhashmap();
你的地图。把(“名字”、“琼”);
你的地图。把(“年龄”,“30”);
YourBean p=新的YourBean();
试一试{
填充(p,你的地图);
}捕获(可丢弃的e){
//做点什么。。。
}
我不确定的是,它是否会自动识别嵌套对象和相应的属性,但也许您可以手动执行di可视化(通过提供2个映射等)


更多信息可以在这里找到

我在StackOverflow上找到了解决我问题的绝佳方法。类似的问题,

其中一个答案是完美的:

您应该使用Spring的BeanRapper类。它支持嵌套属性,并可以选择为您创建内部bean:

BeanOne one = new BeanOne();
BeanWrapper wrapper = PropertyAccessorFactory.forBeanPropertyAccess(one);
wrapper.setAutoGrowNestedPaths(true);

Map<String, Object> map = new HashMap<>();
map.put("fieldOne", "fieldOneValue");
map.put("fieldTwo.fieldOne", "fieldOneValue");

wrapper.setPropertyValues(map);

assertEquals("fieldOneValue", one.getFieldOne());
BeanTwo two = one.getFieldTwo();
assertNotNull(two);
assertEquals("fieldOneValue", two.getFieldOne();
BeanOne one=newbeanone();
BeanRapper包装器=PropertyAccessorFactory.forBeanPropertyAccess(一个);
wrapper.setAutologownestedPath(true);
Map Map=newhashmap();
map.put(“fieldOne”、“fieldOneValue”);
map.put(“fieldTwo.fieldOne”、“fieldOneValue”);
setPropertyValues(map);
assertEquals(“fieldOneValue”,one.getFieldOne());
BeanTwo-two=1.getFieldTwo();
assertNotNull(两个);
assertEquals(“fieldOneValue”,two.getFieldOne();
我希望它能帮助有类似问题的人

BeanOne one = new BeanOne();
BeanWrapper wrapper = PropertyAccessorFactory.forBeanPropertyAccess(one);
wrapper.setAutoGrowNestedPaths(true);

Map<String, Object> map = new HashMap<>();
map.put("fieldOne", "fieldOneValue");
map.put("fieldTwo.fieldOne", "fieldOneValue");

wrapper.setPropertyValues(map);

assertEquals("fieldOneValue", one.getFieldOne());
BeanTwo two = one.getFieldTwo();
assertNotNull(two);
assertEquals("fieldOneValue", two.getFieldOne();