0

我有以下代码:

@POST
@Path("query")
@Produces(MediaType.APPLICATION_JSON)
public MyObject myMethod(@FormParam("id") String id)
{
    //if some condition is met
    if(...)
      throw new WebApplicationException(Response.Status.SERVICE_UNAVAILABLE);
    else
      //proceed to my logic and return myObject
}

所以基本上,如果我的 Web 客户端使用 AJAX 接收到 Response.Status.SERVICE_UNAVAILABLE,它将显示一个自定义网页。如果调用成功,它将显示一个不同的网页。

我的问题是:无论如何myMethod,我可以在Response.Status.SERVICE_UNAVAILABLE不抛出异常的情况下返回。就像是:

if(...)
   return Response.Status.SERVICE_UNAVAILABLE)
else
   //proceed my logic and return myObject  

我基本上希望客户知道此时无法满足其请求并显示自定义网页。

4

1 回答 1

2

你的方法应该返回一个Response,而不是MyObject

@POST
@Path("query")
@Produces(MediaType.APPLICATION_JSON)
public Response myMethod(@FormParam("id") String id) {
  if (/* error */) {
    return Response.status(Response.Status.SERVICE_UNAVAILABLE).build();
  }
  return Response.ok().entity(new MyObject(/* ... */)).build();
}

但是,我强烈建议在WebApplicationException这种情况下使用,主要是为了将常规情况和异常情况进行逻辑分离。此SERVICE_UNAVAILABLE响应状态(HTTP 代码503)是错误的明确指示,而不是正常的执行流程。

于 2012-11-21T20:19:21.890 回答