我有以下用例:
我有地图属性:
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");
}};
我需要将它转换为此pojo
public class WebRequest{
private Requester requester;
private Publication publication;
}
class Requester{
private String firstName;
private String lastName;
private String address;
}
class Publication{
private String type;
private String subType;
}
我可以使用杰克逊进行转换吗?如果没有,那么最适合的库是什么?
谢谢,
Nadiia
答案 0 :(得分:0)
您可以使用常见的apache 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...
}
我不确定的是它是否会自动识别嵌套对象和相应的属性,但也许您可以手动执行此操作(通过提供2个地图等)。
可在此处找到更多信息BeanUtils
答案 1 :(得分:0)
我在StackOverflow上找到了解决我问题的优秀解决方案。类似的问题,
BeanUtils converting java.util.Map to nested bean
其中一个答案是完美的:
你应该使用Spring的BeanWrapper类。它支持嵌套属性,并可选择为您创建内部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();
我希望它会帮助有类似问题的人。