一种可维护的方法来验证类似JSON的属性映射中的键/值

时间:2013-09-18 04:13:29

标签: java json oop validation

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

以玩家属性地图为例:

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

我想验证一些事情

  • 某些键值对是必需的:name属性映射中必须使用playermisc不是。age

  • 某些值需要是特定类型,例如race需要的值 是一个整数。

  • 有些值是枚举,例如human可能是elfdrawfA,但没有别的。

  • 某些键依赖于其他键,如果指定了B键,则还需要指定country键。就像'race': 'human'取决于{'race': 'human', 'country': 'midearth'}一样,{'race': 'human', 'enemy': 'ghost'}也是有效的。 {'race': 'human'},{{1}}不是。

  • 值也可以是地图,该地图中的值不需要是同一类型。

此属性地图将在以后进行扩展。什么设计会使它更具可扩展性?

1 个答案:

答案 0 :(得分: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
}

查找可用的验证注释here和教程here

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

使用Google's GSON API

可以更轻松地将bean从和转换为JSON字符串