如何解决如何将嵌套映射转换为 bean?
当我有如下所示的 bean 和地图结构时
public class MyBean1 {
private String a1;
private String b1;
private List<MyBean2> c1;
public void setA1(String a1) {
this.a1 = a1;
}
public void setB1(String b1) {
this.b1 = b1;
}
public void setC1(List<MyBean2> c1) {
this.c1 = c1;
}
}
public class MyBean2 {
private String a2;
private String b2;
public void setB2(String b2) {
this.b2 = b2;
}
public void setA2(String a2) {
this.a2 = a2;
}
}
public static void main(String[] args) throws Exception {
Map<String,Object> map = new HashMap<>();
map.put("a1","a1");
map.put("b1","b1");
Map<String,Object> nmap1 = new HashMap<>();
nmap1.put("a2","a2");
nmap1.put("b2","b2");
map.put("c1",Collections.singletonList(nmap1));
}
如果我想获取类型为 List<MyBean2>
的字段为 c1 的 bean,我该如何转换此地图?
我已经尝试在 apache-commons-beanutils 中使用 BeanUtils.populate()
,但它会删除类型 MyBean2
并获得 HashMap
。
我可以使用 java 反射来做到这一点吗?或者是否有任何库可以存档我的请求?
如果类型不是List
而是Map
怎么办?或其他泛型类型,如 Optional
?
顺便说一句,我不想使用 json 库或像 MapStruct 或 Dozer 这样的预定义结构库。
解决方法
您可以使用 com.fasterxml.jackson.databind.ObjectMapper,只需在您的主方法中添加以下内容,您就可以获取 Map 作为所需的对象,例如请查看屏幕截图(在调试模式下本地运行)-
ObjectMapper mapper = new ObjectMapper();
final MyBean1 myBean1 = mapper.convertValue(map,MyBean1.class);
System.out.println(myBean1);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。