JAX-RS如何编写响应

时间:2012-11-21 19:55:20

标签: java jax-rs

我有以下代码:

@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  

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

1 个答案:

答案 0 :(得分: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)是错误的明确指示,而不是正常的执行流程。