50.2. WebApplicationException 例外を使用したレポート


            errors
indexterm:[WebApplicationException]

概要

JAX-RS API には WebApplicationException ランタイム例外が導入され、リソースメソッドが RESTful クライアントが消費するのに適した例外を簡単に作成できるようになりました。WebApplicationException 例外には、リクエスト元に返されるエンティティーボディーを定義する Response オブジェクトを含めることができます。また、エンティティーボディーが指定されていない場合に、クライアントに HTTP ステータスコードを指定するメカニズムも提供します。

簡単な例外の作成

WebApplicationException 例外を作成する最も簡単な方法として、no の引数コンストラクターまたは WebApplicationException 例外で元の例外をラップするコンストラクターのいずれかを使用します。どちらのコンストラクターも、空の応答で WebApplicationException を作成します。

これらのコンストラクターのいずれかによって作成された例外が出力されると、ランタイムはエンティティーボディーが空でステータスコードが 500 Server Error のレスポンスを返します。

クライアントに返されるステータスコードの設定

500 以外のエラーコードを返す場合は、ステータスを指定できるようにする 4 つの WebApplicationException コンストラクターのいずれかを使用できます。例50.1「ステータスコードでの WebApplicationException の作成」 に示されているこれらのコンストラクターの 2 つを整数として返します。

例50.1 ステータスコードでの WebApplicationException の作成

WebApplicationExceptionintstatusWebApplicationExceptionjava.lang.Throwablecauseintstatus

例50.2「ステータスコードでの WebApplicationException の作成」 に記載されている他の 2 つは、レスポンスステータスを Response.Status のインスタンスとしてし取ります。

例50.2 ステータスコードでの WebApplicationException の作成

WebApplicationExceptionjavax.ws.rs.core.Response.StatusstatusWebApplicationExceptionjava.lang.Throwablecausejavax.ws.rs.core.Response.Statusstatus

これらのコンストラクターのいずれかによって作成された例外が出力されると、ランタイムはエンティティーボディーが空で指定したステータスコードがレスポンスを返します。

エンティティーボディーの指定

例外とともにメッセージを送信する場合は、Response オブジェクトを取る WebApplicationException コンストラクターのいずれかを使用することができます。ランタイムは、Response オブジェクトを使用してクライアントに送信される応答を作成します。応答に保存されているエンティティーはメッセージのエンティティーボディーに、応答のステータスフィールドはメッセージの HTTP ステータスにマップされます。

例50.3「例外を含めたメッセージの送信」 は、例外の理由を含むテキストメッセージをクライアントに返すコードを示しています。HTTP メッセージのステータスは 409 Conflict に設定されます。

例50.3 例外を含めたメッセージの送信

import javax.ws.rs.core.Response;
import javax.ws.rs.WebApplicationException;
import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl;

...
ResponseBuilderImpl builder = new ResponseBuilderImpl();
builder.status(Response.Status.CONFLICT);
builder.entity("The requested resource is conflicted.");
Response response = builder.build();
throw WebApplicationException(response);

汎用例外の拡張

WebApplicationException 例外を拡張できます。これにより、カスタム例外を作成して、一部のボイラープレートコードを削除できるようになります。

例50.4「Extending WebApplicationException」 では、例50.3「例外を含めたメッセージの送信」 にコードと同様の応答を作成する新しい例外を紹介しています。

例50.4 Extending WebApplicationException

public class ConflicteddException extends WebApplicationException
{
  public ConflictedException(String message)
  {
    ResponseBuilderImpl builder = new ResponseBuilderImpl();
    builder.status(Response.Status.CONFLICT);
    builder.entity(message);
    super(builder.build());
     }
}

...
throw ConflictedException("The requested resource is conflicted.");
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.