私は数年前に書かれたコードに取り組んでいます。 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")を取得した場合、コードベース全体に再び触れる必要はありません。私は見つけることができませんでした
は、任意のパターンは、一般的に、この種の状況を処理するために(多分私のグーグルでスキルを吸う)ので、私は彼らの意見/思考のためにここに専門家に手を差し伸べています。単独の新しいステータスコードを追加
から自分のクラスを生成するためにMaven pluginを使用することができますこの問題はうまくカバーされました。[この質問を参照](https://stackoverflow.com/questions/5128442/how-to-convert-a-string-to-jsonobject-using-gson-library) –
あなたはGSONやjacksonのライブラリのようなものを見ることができます。これは同じものを作成するのに役立ちます –
ありがとう、JSON解析の問題を解決します。新しい状態コードが来るときに複数の場所でクライアントコードに別のif文を追加する必要がないように、上記のコードをリファクタリングするより良い方法はありますか? – Skandh