Suppose you have to write some generic utility which should extract the field name and values from Java DTO.
Problem: There is a tracing library where you need to add a few critical fields and their values which will make the debugging very easier in any environment. Say, Jaeger.
Jaeger is a library which helps trace various class level calls in a microservices environment.
How would you convert the fields into Key value structure:
public static Map<String, String> extractFields(Object obj) {
Map<String, String> map = new HashMap<>();
if(obj == null) return map;
Class<?> cls = obj.getClass();
for(Field field: cls.getDeclaredFields()) {
String name = field.getName();
if("String".equals(field.getType().getSimpleName())) {
field.setAccessible(true);
try{
String val = (String) field.get(obj);
if(val != null) {
map.put(name, val);
}
} catch(IllegalAccessException e) {
Logger.error("Error extracting {} field", field);
}
}
}
return map;
}