0

我正在编写一个 java 程序来验证属性映射中的键和值,可以将其视为 JSON 对象。现在我正在使用深度嵌套的 if-else 来验证它,但它很容易出错。不确定这是否可以在任何设计模式中轻松解决。

以玩家属性图为例:

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

我想验证几件事

  • 一些键值对是强制性的:likenameplayer属性映射中是强制性的,misc不是。

  • 某些值需要是特定类型,例如值age需要是整数。

  • 一些值是枚举,比如race可能是human, elfdrawf但仅此而已。

  • 某些键依赖于其他键,如果A指定了键,则B还需要指定键。就像 ifcountry取决于'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
}

在此处查找可用的验证注释并此处查找教程。

在我看来,将验证应用于 Java bean 而不是 JSON 字符串/对象将是更好的方法。

使用Google 的 GSON API可以更轻松地将 bean 从 JSON 字符串转换为 JSON 字符串

于 2013-09-18T05:34:19.887 回答