我有一个Java对象obj
具有属性obj.attr1
,obj.attr2
等属性通过额外的间接水平可能访问:obj.getAttr1()
,obj.getAttr2()
,如果不公开。
挑战 :我想一个函数,一个对象,并返回一个Map<String, Object>
,其中的键是字符串"attr1"
,"attr2"
等等和值对应的对象obj.attr1
,obj.attr2
。我想函数会被类似的东西调用
toMap(obj)
,toMap(obj, "attr1", "attr3")
(其中attr1
和attr3
是obj
的属性的子集),toMap(obj, "getAttr1", "getAttr3")
如有必要。我对Java的自省了解不多:如何在Java中做到这一点?
现在,toMap()
对于我关心的每个对象类型,我都有一个专门的实现,这太样板了。
注意 :对于那些了解Python的人,我想要类似的东西obj.__dict__
。或dict((attr, obj.__getattribute__(attr)) for attr in attr_list)
针对子集变体。
您可以为此使用JavaBeans自省。阅读java.beans.Introspector
课堂上的内容:
public static Map<String, Object> introspect(Object obj) throws Exception {
Map<String, Object> result = new HashMap<String, Object>();
BeanInfo info = Introspector.getBeanInfo(obj.getClass());
for (PropertyDescriptor pd : info.getPropertyDescriptors()) {
Method reader = pd.getReadMethod();
if (reader != null)
result.put(pd.getName(), reader.invoke(obj));
}
return result;
}
大警告: 我的代码仅处理getter方法;它不会找到裸露的田野。有关字段,请参见高度咖啡因的答案。:-)(您可能希望将两种方法结合起来。)
我有一个对象,我正试图映射到。现在这个有一个名为的枚举,其中包含一些值。我想使用将它们映射到中的其他枚举值。以下是我到目前为止的代码: 当我尝试编译它时,我得到了错误:
我想使用Java流按对用户列表进行分组。 例如,我有。
我正在使用Java11和ProjectReactor(来自Spring)。我需要对RESTAPI进行http调用(在整个流中只能进行一次)。对于响应,我需要计算两件事: 检查数据库(mongodb)中是否存在文档。如果它不存在,则创建并返回它。否则就退回吧 在伪代码中是这样的: 问题是calculateValue需要来自http的返回值。getData,但这已经在第一个flatMap上使用,但我们
问题内容: 是否有Java等效于.Net的Automapper? 问题答案: 检出推土机项目。 推土机支持简单的属性映射,复杂的类型映射,双向映射,隐式-显式映射以及递归映射。 它利用BeanUtils并对其进行扩展。
给出以下SQL模式: 我想要一个地图绘制者,比如: 所以我可以这样做: 我不知道怎么做,除了在personMapper之后。getPersons()来操作结果。
我有一个用例,其中我需要维护两组JSON输出,一组具有JSON属性的漂亮名称,另一组没有。所以我决定自定义ObjectMapper,以便它忽略字段上的@JSONProperty(“pretty name”)注释,而使用字段属性名。在本例中,希望得到以下JSON输出 具有漂亮名称的JSON输出如下所示 我的ObjectMapper配置代码如下所示 我看了一些其他的答案,但对我不起作用。我得到了一个N