java检查字段的特定值

时间:2014-07-24 05:43:07

标签: java

我要求检查特定字段只允许特定值,如何在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

3 个答案:

答案 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)

您可以为EnumsDate创建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(以逗号分隔)并在验证方法中读取它们(如果您主要拥有具有常量值的静态字段列表

  • 如果枚举完全静态,请使用枚举。我同意它会让你编写额外的代码行,但是在枚举中使用常量字段值是一种很好的做法。