Sto progettando un oggetto di risposta unificato per l'applicazione di servizi REST, in modo che il client si aspetti sempre la stessa struttura, sia che venga generata un'eccezione, che venga restituito uno stato semplice, una mappa di chiavi e valori o un DTO complesso. L'idea è che in qualsiasi dei casi di cui sopra, voglio avvolgere la risposta in un oggetto che contiene un messaggio, tempo di risposta e altre informazioni generali .. ecco cosa ho fatto, e voglio un feedback dagli esperti qui, se questo è l'approccio migliore, c'è un approccio migliore che segue un modello di progettazione noto per il problema, questo design ha uno svantaggio e se questo design segue uno dei modelli di design conosciuti:
@Data
public class StandardResponse{
public static int STATUS_RESPONSE = 1;
public static int DTO_RESPONSE = 2;
public static int MAP_RESPONSE = 3;
public static int SINGULAR_RESPONSE = 4;
public static int EXCEPTION_RESPONSE = 5;
protected Date responseTime;
protected String message;
protected int responseType;
protected Object containedObject;
public StandardResponse() {
responseTime = new Date();
}
public StandardResponse(String message, Object containedObject, int responseType) {
this();
this.message = message;
this.containedObject = containedObject;
this.responseType = responseType;
}
public static StandardResponse createStandardResponse(int responseType, Object input) {
return createStandardResponse(responseType, input, null);
}
public static StandardResponse createStandardResponse(int responseType, Object input, String message) {
StandardResponse response = null;
Object containedObject = null;
if(STATUS_RESPONSE == responseType) {
containedObject = new StatusResponseDTO((Boolean)input);
}else if(DTO_RESPONSE == responseType) {
containedObject = input;
}else if(MAP_RESPONSE == responseType) {
containedObject = input;
}else if(SINGULAR_RESPONSE == responseType) {
Map<String,Object> singularValue = new HashMap<String,Object>();
singularValue.put("value", input);
containedObject = singularValue;
}else if(EXCEPTION_RESPONSE == responseType) {
//TODO
}
response = new StandardResponse(message,containedObject,responseType);
return response;
}
}
Perché non sono andato nel modo più semplice di creare una super classe StandardResponse
ed ereditare tutti gli altri tipi da esso? perché in caso di restituzione di Map o Exception non sarò esteso StandardResponse