我要求检查特定字段只允许特定值,如何在java中做到最好。
例如:
对于“状态”字段,只允许的值为“eq”和“in” 对于“日期”字段,仅允许的值为“gt”,“ge”和“eq”
我的方法看起来像这样,
boolean checkFieldAndOperatorMatching(String field, String operator);
例如,如果有人通过
checkFieldAndOperatorMatching("status", "eq"); //correct
checkFieldAndOperatorMatching("status", "in"); //correct
checkFieldAndOperatorMatching("status", "gt"); // not correct
checkFieldAndOperatorMatching("date", "gt"); //correct
checkFieldAndOperatorMatching("date", "ge"); //correct
checkFieldAndOperatorMatching("date", "eq"); //correct
checkFieldAndOperatorMatching("date", "in"); // not correct
答案 0 :(得分:2)
使用“属性”,您可以执行以下操作(根据您的要求进行更改):
public boolean checkFieldAndOperatorMatching(String field, String operator) {
// can be loaded once
// make it static or use a factory method
// which returns same Properties instance every time if already loaded
Properties properties = new Properties();
try (FileInputStream fin = new FileInputStream("D:\\fields.properties");) {
properties.load(fin);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String validValues = properties.getProperty(field);
return Arrays.asList(validValues.split(",")).contains(operator);
}
其中,fields.properties
包含:
date=gt,ge,eq
status=eq,in
答案 1 :(得分:1)
您可以为Enums
和Date
创建Status
,其中包含允许的值: -
enum Status {
eq,in
}
enum Date {
gt,ge,eq
}
然后遍历枚举以检查参数中传递的值是否存在于枚举中: -
static boolean checkFieldAndOperatorMatching(String field, String operator){
if(field.equals("Status")){ //if field is Status
for (Status s : Status.values()) {
if(operator.equals(s.toString())){
return true;
}
}
return false;
}
if(field.equals("Date")){ //if field is Date
for (Date d : Date.values()) {
if(operator.equals(d.toString())){
return true;
}
}
return false;
}
}
答案 2 :(得分:0)
如果您有许多要验证的字段,可以执行以下操作
使用DB存储键值并将其缓存在Collections中进行验证(如果您有可增长的字段数)
使用“属性”文件表示$ field = $ values(以逗号分隔)并在验证方法中读取它们(如果您主要拥有具有常量值的静态字段列表
如果枚举完全静态,请使用枚举。我同意它会让你编写额外的代码行,但是在枚举中使用常量字段值是一种很好的做法。