1. ホーム
  2. java

[解決済み] Javaでエラーコード/文字列を定義する最良の方法とは?

2022-07-01 02:25:36

質問

私はJavaでWebサービスを書いています。 エラーコードとそれに関連するエラー文字列を定義するための最良の方法を見つけようとしています。 . 私は、数値のエラーコードと、一緒にグループ化されたエラー文字列を持つ必要があります。エラーコードとエラー文字列の両方は、ウェブサービスにアクセスするクライアントに送信されます。例えば、SQLExceptionが発生したとき、次のようにしたいと思います。

// Example: errorCode = 1, 
//          errorString = "There was a problem accessing the database."
throw new SomeWebServiceException(errorCode, errorString);

クライアントプログラムにメッセージが表示される場合があります。

エラー#1が発生しました。データベースへのアクセスに問題が発生しました。 データベースへのアクセスに問題が発生しました。

私が最初に考えたのは Enum をオーバーライドして toString メソッドをオーバーライドして、エラー文字列を返します。以下は、私が思いついたものです。

public enum Errors {
  DATABASE {
    @Override
    public String toString() {
      return "A database error has occured.";
    }
  },

  DUPLICATE_USER {
    @Override
    public String toString() {
      return "This user already exists.";
    }
  },

  // more errors follow
}

質問です。 これを行うためのより良い方法はありますか?私は、外部ファイルから読み込むのではなく、コードで解決することを望んでいます。私はこのプロジェクトのために Javadoc を使用しています。そして、エラー コードをインラインで文書化し、それらを文書で自動的に更新できるようにすると便利です。

どのように解決するのですか?

まあ確かにenumソリューションのより良い実装があります(これは一般的に非常に素晴らしいものです)。

public enum Error {
  DATABASE(0, "A database error has occurred."),
  DUPLICATE_USER(1, "This user already exists.");

  private final int code;
  private final String description;

  private Error(int code, String description) {
    this.code = code;
    this.description = description;
  }

  public String getDescription() {
     return description;
  }

  public int getCode() {
     return code;
  }

  @Override
  public String toString() {
    return code + ": " + description;
  }
}

説明文を返すために toString() をオーバーライドしたいかもしれませんが、よくわかりません。とにかく、要点は、各エラーコードについて個別にオーバーライドする必要がないことです。また、序列の値を使用する代わりにコードを明示的に指定していることにも注意してください - これは後で順序を変更したり、エラーを追加/削除するのが簡単になります。

これはまったく国際化されていないことを忘れないでください - しかし、Webサービスクライアントがロケールの記述を送ってこない限り、とにかく簡単に自分自身で国際化することはできません。少なくとも、クライアント側で国際化のために使用するエラーコードを持つことになります...。