2017-11-29 9 views
0

私は数年前に書かれたコードに取り組んでいます。 JSONからPOJOをビルドします。 JSONにはstatusTypeフィールドがあります。他のすべてのフィールドの値は、statusTypeフィールドに依存します。 statusTypeがSUCCESSの場合は、successCode、totalValue、concessionなどのフィールドに値が設定され、FAILUREの場合はerrorCode、exceptionType、retryCountsフィールドに値が設定されます。Java:JSONからPOJOを作成するベストプラクティス

{ 
    "statusType": "SUCCESS", 
    "successCode": "20.304", 
    "total": 1000 
} 

{ 
    "statusType": "FAILED", 
    "errorCode": "50.31", 
    "retryCounts": 2 
} 

POJOは、次のように定義されています

JsonPOJO pojo = buildPojo(); 
if (pojo.getStatusCode.equals(“SUCCESS”)) { 
     String successCode = pojo.getSuccessCode(); 
} else { 
     String errorCode = pojo.getErrorCode(); 
} 

コードの上に(10ヶ所の周り)に散在されています

public class JsonPOJO { 
    public String statusType; 
    public String successCode; 
    public int retryCounts; 
    pubic int total; 
    public String errorCode; 
} 

クライアントコードは、次のようなものです。まもなく、ステータスコード "IN_PROGRESS"が追加されます。これはJSONのフィールド数を少なくし、POJOはstatusTypeをチェックするコード全体で、より多くのフィールドを持ち、結果的にif/elseステートメントを増やします。私はこのルートを通過したくありません。私はエレガントなコードをリファクタリングしたいので、別のステータスコード(例えば "SUSPENDED")を取得した場合、コードベース全体に再び触れる必要はありません。私は見つけることができませんでした

は、任意のパターンは、一般的に、この種の状況を処理するために(多分私のグーグルでスキルを吸う)ので、私は彼らの意見/思考のためにここに専門家に手を差し伸べています。単独の新しいステータスコードを追加

+0

から自分のクラスを生成するためにMaven pluginを使用することができますこの問題はうまくカバーされました。[この質問を参照](https://stackoverflow.com/questions/5128442/how-to-convert-a-string-to-jsonobject-using-gson-library) –

+0

あなたはGSONやjacksonのライブラリのようなものを見ることができます。これは同じものを作成するのに役立ちます –

+0

ありがとう、JSON解析の問題を解決します。新しい状態コードが来るときに複数の場所でクライアントコードに別のif文を追加する必要がないように、上記のコードをリファクタリングするより良い方法はありますか? – Skandh

答えて

0

は、複数のフィールドを追加しません。 JSONを追加すると、Javaを更新する必要があります。そうしないと、新しいフィールドを取得できません。

私はジャクソンがハッシュマップにすべての余分なJSON値を格納するためのオプションを持って知っています。私はその特徴を見るのに十分なGsonを使用していない。

しかし、あなたはまた、あなたがゼロから自分で何かを構築する必要がない限り、すでに持っているGSON、のようなライブラリを使用することを検討したJavaを自分で書くことについて忘れて、単純にJSONスキーマ定義

+0

ありがとう、それはJSONの解析問題を解決します。新しい状態コードが来るときに複数の場所でクライアントコードに別のif文を追加する必要がないように、上記のコードをリファクタリングするより良い方法はありますか? – Skandh

+0

ステータスとコマンドパターンにハッシュマップを使用できますが、単純なif/switch文ではなく、一連のクラスにコードをリファクタリングする必要があります。 https://dzone.com/articles/design-patterns-command https://stackoverflow.com/questions/1554180/why-is-the-if​​-statement-considered-evil –

関連する問題