几个月前,我在为学校开发项目时遇到了类似的问题。解决方案是创建一个信封并始终返回它。该信封将包含一个名为"data"的字段,它是通用的;因此,您将能够将其绑定到任何数据类型。
请注意,即使我使用了它,但后来我读到应该很少使用它(我认为您的情况是使用的好例子),但从技术上讲,如果请求失败,则应抛出异常对象。
无论如何,这是我用来返回所有响应的Response类:
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!");
}
}
设置完成后,我们将直接从Comtroller创建响应。 我稍微更改了它,以使其与示例一起工作,应该足够易读。 请注意,我为我的响应编写了静态方法:“success()”、“error()”...
@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);
}
}
这是响应正文的示例:
{{link1:
}}
希望这可以帮到你。
WidgetDto
列表? - tim_yates