I have a Java object obj
that has attributes obj.attr1
, obj.attr2
etc. The attributes are possibly accessed through an extra level of indirection: obj.getAttr1()
, obj.getAttr2()
, if not public.
The challenge: I want a function that takes an object, and returns a Map<String, Object>
, where the keys are strings "attr1"
, "attr2"
etc. and values are the corresponding objects obj.attr1
, obj.attr2
.
I imagine the function would be invoked with something like
toMap(obj)
,toMap(obj, "attr1", "attr3")
(where attr1
and attr3
are a subset of obj
's attributes), toMap(obj, "getAttr1", "getAttr3")
if necessary.I don't know much about Java's introspection: how do you do that in Java?
Right now, I have a specialized toMap()
implementation for each object type that I care about, and it's too much boilerplate.
NOTE: for those who know Python, I want something like obj.__dict__
. Or dict((attr, obj.__getattribute__(attr)) for attr in attr_list)
for the subset variant.
Another way to user JacksonObjectMapper
is the convertValue
ex:
ObjectMapper m = new ObjectMapper();
Map<String,Object> mappedObject = m..convertValue(myObject, new TypeReference<Map<String, String>>() {});