ich ein ähnliches Problem vor ein paar Monaten konfrontiert, wenn Ich habe ein Projekt für die Schule entwickelt. Die Lösung besteht darin, einen Umschlag zu erstellen und ihn immer zurückzugeben. Der Umschlag enthält ein Feld "Daten", das ein generisches ist; So können Sie es an jeden Datentyp binden. Beachten Sie, dass, obwohl ich es später verwendete ich gelesen habe, dass es Scarecly verwendet werden sollte (ich denke, Ihr Fall ist ein gutes Beispiel für die Verwendung), aber technisch sollte ein Ausnahmeobjekt geworfen werden, wenn die Anfrage fehlgeschlagen ist.
Auf jeden Fall ist dies meine Antwort-Klasse, die ich verwendet, um alle meine Antworten zurück:
public class Response <AnyData> {
private static final String SUCCESS = "success";
private static final String FAILURE = "failure";
private String status;
private AnyData data;
private String error;
private Response(String status, AnyData data, String error) {
this.status = status;
this.data = data;
this.error = error;;
}
private Response(String status, AnyData data) {
this(status, data,"");
}
private Response(String status, String error) {
this(status, null, error);
}
public static <AnyData> Response<AnyData> success(AnyData data) {
return new Response<AnyData>(SUCCESS, data);
}
public static <AnyData> Response<AnyData> failure(String error) {
return new Response<AnyData>(FAILURE, error);
}
public static <AnyData> Response<AnyData> unimplemented() {
return new Response<AnyData>(FAILURE, "Missing implementation in the backend.");
}
public static <AnyData> Response<AnyData> failureUserNotFound() {
return Response.failure("User not found!");
}
public static <AnyData> Response<AnyData> failureBusinessNotFound() {
return Response.failure("Business not found!");
}
// Removed getters and setters for simplicity.
}
Danach gesetzt ist, werden wir nur die Antworten erstellen direkt aus dem Auditor. Ich habe es ein bisschen geändert, damit es mit der Probe funktioniert, sollte genug lesbar sein. Beachten Sie, dass ich statische Methoden für meine Antworten: Erfolg() ", 'Fehler()' ...
@RestController
@Api(tags={"Widgets"})
public class WidgetController {
@RequestMapping(value="/api/widgets", method=RequestMethod.GET, produces=MediaType.APPLICATION_JSON)
@ApiOperation(value = "Get all widgets.")
@ApiResponses(value = {
@ApiResponse(code = 200, message = "Returns the list of widgets.")
})
public Response<List<WidgetDto>> getWidgets() {
List<WidgetDto> widgets = new LinkedList<>();
widgets.add(new WidgetDto(1234, "val1"));
widgets.add(new WidgetDto(5678, "val2"));
return Response.success(widgets);
}
}
Und hier ist eine Probe des Antworttextes: 
this helps .
Können Sie eine Wrapper-Klasse erstellen, die eine Liste von "WidgetDto" in einem Feld "Daten" darstellt? –
@tim_yates Ja, aber ich hoffe, dass es eine wiederverwendbare Lösung gibt, die es nicht erforderlich macht, spezifische Wrapper-Klassen für jeden DTO-Typ zu erstellen. – Bill