java - REST (Jersey):在返回类型不是 Response 的方法中返回响应中的错误
问题描述
我有一些通过 ajax 调用的 Web 应用程序的 REST 方法。它们中的大多数返回 DTO 列表,因此方法的返回类型被声明为 List,从列表中生成 JSON。一切正常,但现在我需要在其中一种方法中区分空列表(对前端有效)和空列表。
这是相关方法的简单代码:
@GET
@Path("getComparedItems")
@Produces(MediaType.APPLICATION_JSON)
public List<ItemDTO> getComparedItems() {
List<ItemDTO> comparedItems = itemsService.getComparedItemsDTOList();
//List populated with updated/new items.
//If empty: no changes
//If null: error, probably obtaining external data
if (comparedItemsPlayers != null) {
return comparedItems;
} else {
//TODO...
}
}
所以,关于 TODO 块,它应该返回一个错误:
我可以返回 null(它变成 204 No content)并在 ajax 调用中处理该代码,但我更愿意避免这种情况,因为 ajax 调用目前仅处理 5xx 错误(并且因为 204 不是错误顺便说一句)。我可以抛出 WebApplicationException 或其他异常,因此前端会意识到 500 错误,但我不希望 rest 方法中出现异常,或者至少在没有显式构建错误的情况下不希望出现异常。
所以,我想做的事情是返回一个像这样的响应:
return Response.serverError().build();
这样做,迫使我将方法的返回类型更改为响应。
只是出于好奇,我想知道是否有一种方法可以将返回类型保持为 List,并构建一个与该错误兼容的响应。我阅读了它,并找到了一些方法将列表作为通用实体放入响应中:
GenericEntity<List<ItemDTO>> respEntity =
new GenericEntity<List<ItemDTO>>(comparedItems) {};
return Response.serverError().entity(respEntity).build();
但是(我应该注意到)这些类型仍然不兼容。那么,我怎样才能将列表作为列表返回但指定服务器错误?无论如何,在这些情况下是否有办法或方法返回类型必须更改?
谢谢你。
解决方案
推荐阅读
- reactjs - 当我使用 Visual Studio Code 时,此系统上禁用了运行脚本
- javascript - React 中的 Eslint 更漂亮的误报 - serviceWorker.ts
- javascript - Why props is not working with my child component React JS (react native)
- python-3.x - i cant access to post data in get from django
- reactjs - Chrome Extension using React limited to popover
- python - Lines are not highlighted
- java - Painting a Rectangle to a Canvas via Button
- jquery - 在 Bootstrap 中清除数据关闭的所有模态弹出数据
- spring-boot - 用于 SCDF Kubernetes 的 Cloudfoundry-UAA
- c# - 在 Visual Studio 快速操作中优先使用用户命名空间而不是系统