我有以下代码:
@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
我基本上希望客户知道此时无法满足其请求并显示自定义网页。
答案 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
)是错误的明确指示,而不是正常的执行流程。