java - 在失败和错误情况下使用什么 : WebApplicationException vs Response?

标签 java json rest jersey jax-rs

我正在处理 Rest 服务,如果出现故障/错误,我会感到困惑,我应该使用 Response 还是 WebApplicationException

下面是我使用 Response 返回 400 Bad Request 错误消息以及 JSON 响应错误的示例。

@GET
@Path("/data")
@Produces(MediaType.APPLICATION_JSON)
public Response getData(@Context UriInfo uriInfo) {
    String client = getClientId();
    if (client == null || client.isEmpty()) {
        return Response.status(HttpServletResponse.SC_BAD_REQUEST)
                .entity("{\"error\": \"client id is null or empty\"}").build();
    }

    // some code and return succesfull response

    return Response
            .status(HttpServletResponse.SC_OK)
            .entity(resp.getResponse()).build();
}

在这里做什么是正确的?如果我需要使用 WebApplicationException 那么我该如何使用它来返回 400 Bad Request 错误消息以及 JSON 响应

最佳答案

在这种特殊情况下,返回Response 还是抛出映射异常,我说这只是一个偏好问题。但在某些情况下,返回 Response 是不可能的,例如,如果您绑定(bind)到接口(interface)协定,返回类型不是 Response,或者您不在资源方法的上下文,比如在过滤器或拦截器中。

如果您需要抛出异常并且不可能返回Response(或者您宁愿抛出异常),如果您查看WebApplicationException 的构造函数,您会注意到它有一个构造函数,但 Response 除外。如果抛出异常,这确实是添加正文的唯一方法(除非您使用 mapper )。

关于java - 在失败和错误情况下使用什么 : WebApplicationException vs Response?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30948966/

相关文章:

java - 您如何在模块化 Java 项目中组织测试?

java - linux spring 工具套件(eclipse)从终端启动而不是从桌面启动

java - 在java中访问祖 parent 方法

java - 如何在使用 post() 之前查看使用对象构造的 JSON 对象

java - 如何将HttpServletRequest转换为对应的HttpClient对象

java - 使用 Saxon-HE 在 JavaFX 中对 xml 文件进行 XSLT 转换

json - 如何在ansible中使用匹配的值进行Json查询

javascript - 如何将 JSONP 存储到变量中?

rest - 如何使用 curl 在 Dspace 6 REST API 中上传比特流

java - 检索 spring boot 中的特定字段