我正在编写一个java程序来验证属性映射中的键和值,它可以视为JSON对象。现在我使用深度嵌套的if-else来验证它,但它很容易出错。不确定这是否可以在任何设计模式中轻松解决。
以玩家属性地图为例:
'player' = {'name': 'player1',
'age': 18,
'race': 'human',
'skills': 'pick pocket',
'misc': { 'hoppy': 'sleep', 'exp': 238459 }
};
我想验证一些事情
某些键值对是必需的:name
属性映射中必须使用player
,misc
不是。age
。
某些值需要是特定类型,例如race
需要的值
是一个整数。
有些值是枚举,例如human
可能是elf
,drawf
,A
,但没有别的。
某些键依赖于其他键,如果指定了B
键,则还需要指定country
键。就像'race': 'human'
取决于{'race': 'human', 'country': 'midearth'}
一样,{'race': 'human', 'enemy': 'ghost'}
也是有效的。 {'race': 'human'}
,{{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
}
在我看来,在Java bean而不是JSON字符串/对象上应用验证将是更好的方法。
可以更轻松地将bean从和转换为JSON字符串