ホームページ  >  に質問  >  本文

架构设计 - JAVA端的错误码和错误信息,该设计成全局常量还是枚举值?

Map<String,String> responseInfo = new HashTable<String,String>();
responseInfo.set("FE_PRC_BACK_001","TargetUri is not exist");
//responseInfo.set("FE_XREQ_002","Target Uri of XRequest is Empty.");
//responseInfo.set("FE_REQ_003","The processor flag is incorrect or the BusinessContext time out.");

FE_PRC_BACK_001这样的是错误码,TargetUri is not exist是错误信息,需要以键值对(JSON)的形式响应给浏览器
这时,JAVA端是应该以什么方式来罗列这些错误码和错误信息呢?常量?还是枚举类型?

String FE_PRC_BACK_001 = "TargetUri is not exist";

请教一下各位大神,你们的项目中都是怎么设计的?

黄舟黄舟2722日前972

全員に返信(3)返信します

  • 伊谢尔伦

    伊谢尔伦2017-04-18 09:18:48

    次の 2 つの解決策があります。
    1. オブジェクトにカプセル化します。たとえば、

    リーリー

    2. 次のように列挙を使用して実装します。

    リーリー

    1 と 2 の実装のアイデアは実際には似ています (トピックで示されているコードのアイデアも似ています。違いは、特定の DTO を使用するか一般的な Map を使用するかだけです)。ただし、列挙型を使用する場合は、以下の注意すべき箇所:
    列挙型 Result がベース API バージョン 1.0.0 に存在し、それぞれプロジェクト A と B があり、プロジェクト A がプロジェクト B に依存し、プロジェクト A と B の両方が存在すると仮定します。 Base-API
    1 に依存します。プロジェクト B が Base-API を 1.0.1 にアップグレードし、新しい列挙子が Result に追加され、プロジェクト B のインターフェイスは新しい列挙子を返しますが、プロジェクト A はその列挙子を返しません。 Base-API をアップグレードするときに、インターフェイスが呼び出され、新しい列挙が返されると、新しい列挙が古いバージョンの Base-API に存在しないため、逆シリアル化例外が報告されます。デフォルトでは、列挙型を列挙型変数名にシリアル化します。カスタム形式 (msg など) にシリアル化する場合は、シリアライザーをカスタマイズする必要があります。

    返事
    0
  • 阿神

    阿神2017-04-18 09:18:48

    すべてのエラー メッセージが特定されている場合は、グローバル定数よりも列挙型を使用する方が簡単です。エラー コードやメッセージに対応するグローバル定数を用意するのは、依然として非常に面倒です。

    私は Java の列挙型が最も好きです。主な理由は、Java の列挙型は拡張、構築、書き換えができるからですtoString... Java の列挙型自体はオブジェクトであり、列挙型自体はかなり特殊なクラスだからです。

    エラー メッセージを修正できない場合は、申請プロセス中にエラー メッセージが追加され、データベースに保存されることがあります。次に、それを処理するための特別な管理クラスのセットを作成し、HashTable または HashMap を使用して実装する必要があります。しかし、あなたの問題はそれほど複雑ではないと思います。

    返事
    0
  • PHPz

    PHPz2017-04-18 09:18:48

    Java 列挙に間違ったキーを入れてから、間違ったキーと間違った情報の間のマッピングをプロパティ ファイルなどの外部ファイルに入れます。実行時には、エラー列挙キーに基づいてファイルからエラー テキストをリアルタイムで取得するだけです。エラーは頻繁に発生するものではないため、エラー情報をリアルタイムで読み取ることも問題ありません。プログラムが開始され、パフォーマンスを向上させるために情報が読み取られてキャッシュされます。

    返事
    0
  • キャンセル返事