0

JSON オブジェクトとして扱うことができるプロパティ マップのキーと値を検証する Java プログラムを作成しています。現在、深くネストされた if-else を使用して検証していますが、非常にエラーが発生しやすくなっています。これがどの設計パターンでも簡単に解決できるかどうかはわかりません。

例として、プレーヤー プロパティ マップを取り上げます。

'player' = {'name': 'player1', 
            'age': 18, 
            'race': 'human',
            'skills': 'pick pocket',
            'misc': { 'hoppy': 'sleep', 'exp': 238459 }
           };

いくつか検証したい

  • 一部のキーと値のペアは必須nameです。like はplayerプロパティ マップで必須ですが、必須でmiscはありません。

  • age値が整数である必要があるように、一部の値は特定の型である必要があります。

  • 一部の値は、 , のように列挙型ですがracehumanelfにはdrawf何もありません。

  • 一部のキーは他のキーに依存します。キーが指定されている場合Aは、Bキーも指定する必要があります。countryに依存する場合'race': 'human'のように、{'race': 'human', 'country': 'midearth'}有効です。{'race': 'human', 'enemy': 'ghost'}{'race': 'human'}ありません。

  • 値はマップでもかまいません。そのマップの値は同じ型である必要はありません。

このプロパティ マップは、将来拡張される予定です。拡張性を高めるにはどのような設計が必要ですか?

4

1 に答える 1

1

Java クラスから始めます。JSR-303 検証アノテーションを使用すると、労力を大幅に削減できます。

例 :-

class Player{

    @NotNull
    @Size(min=5,max=200)
    private String name;

    @Min(value=10)
    @Max(value=60)
    private int age;

    .
    .
    . // other fields
}

利用可能な検証アノテーションはこちらで、チュートリアルはこちらでご覧いただけます。

私の意見では、JSON 文字列/オブジェクトの代わりに Java Bean に検証を適用する方が良い方法です。

Google の GSON APIを使用すると、Bean を JSON 文字列との間で簡単に変換できます。

于 2013-09-18T05:34:19.887 に答える