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
}

したがって、基本的に、AJAX を使用する Web クライアントが Response.Status.SERVICE_UNAVAILABLE を受信すると、カスタマイズされた Web ページが表示されます。呼び出しが成功すると、別の Web ページが表示されます。

私の質問は次のとおりです。例外をスローせずmyMethodに を返すことができる方法はありますか。Response.Status.SERVICE_UNAVAILABLE何かのようなもの:

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

私は基本的に、現時点ではリクエストを実行できないことをクライアントに知らせ、カスタマイズされた Web ページを表示してもらいたいと考えています。

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 に答える