I am converting objects that are coming through an API
request body to JPA
objects as below.
public class Converter {
public static <T> Object from(T request) {
if(ObjectUtils.isEmpty(request))
return null;
if(request instanceof ConfigRequest) {
Config config = new Config(); //create JPA object to copy properties into from request body
BeanUtils.copyProperties(request, config);
return config;
}
if(request instanceof DecisionRequest) {
Decision decision = new Decision();
BeanUtils.copyProperties(request, decision);
return decision;
}
.......
}
}
I have around 15 different request objects to work with (which will lead to 15 if
blocks).
Is there a cleaner way of achieving the same goal with Generics
or some other way I may have missed out?
TIA.
"... I have around 15 different request objects to work with (which will lead to 15
if
blocks).Is there a cleaner way of achieving the same goal with
Generics
or some other way I may have missed out? ..."
Rather than generics, utilize a class hierarchy.
Delegate each if-statement from the corresponding class.
abstract class Request {
abstract Object get();
boolean isConfig() { return this instanceof ConfigRequest; }
boolean isDecision() { return this instanceof DecisionRequest; }
}
class ConfigRequest extends Request {
@Override
Config get() {
Config config = new Config(); //create JPA object to copy properties into from request body
BeanUtils.copyProperties(request, config);
return config;
}
}
class DecisionRequest extends Request {
@Override
Decision get() {
Decision decision = new Decision();
BeanUtils.copyProperties(request, decision);
return decision;
}
}
Then, simply return the get call.
public static Object from(Request request) {
if(ObjectUtils.isEmpty(request)) return null;
return request.get();
}