Java字段名称到字段值的映射



是否可以使用任何已知库(jackson、mapstruct等(获得Map<String,Object>,其中key是java类中的字段名,value是该字段值?我的意思是,如果我有像这样的A级

class A {
String a;
Integer b;
List<SomeClass> c;
}

我想要地图m<字符串,对象>像

m.put("a", a.a);
m.put("b", a.b);
m.put("c", a.c);

我试过(并且成功地(用反射来做这件事,比如declardFields((中的Field。。。

但建议我使用任何现有的解决方案。到目前为止找不到。

最好的解决方案是类似Jackson

ObjectMapper.convertValue(myObject, Map.class);

但不要把所有东西都映射到字符串。

您可以通过一些ObjectMapper配置来实现这一点。

  • 对于多态类型的反序列化,您可以激活DefaultTyping。使用LaissezFaireSubTypeValidator允许所有子类型的PolymorphicTypeValidator参数
  • 如果你的类没有公共getter和setter,你可以设置VisibilityANY,使所有字段都可以串行化注释(确保类具有空构造函数(

总结一切:

ObjectMapper mapper = new ObjectMapper()
.activateDefaultTyping(
new LaissezFaireSubTypeValidator(), 
ObjectMapper.DefaultTyping.NON_FINAL, As.PROPERTY)
.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
A obj = new A();
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
A objDeserilized = mapper.readValue(json, A.class);

最新更新