Evaluar la regla basada JSON en tiempo de ejecución en Java

Z3R0:

Tengo un requisito de las reglas del convertido presentar en formato JSON en la base de datos de código en Java en tiempo de ejecución.

Por ejemplo,

{
  "id": "g-KqVJwrEMUYNOEVEnNxxqc",
  "rules": [
    {
      "id": "r-2VC4YQOkYu-lxkGgMABRc",
      "field": "firstName",
      "value": "Steve",
      "operator": "="
    },
    {
      "id": "r-B2Dd6eHO1rsZ-t1mfPk33",
      "field": "lastName",
      "value": "Vai",
      "operator": "="
    }
  ],
  "combinator": "and",
  "not": false
}

Las teclas de la JSON se conocen de antemano. También los campos y valores de operador serán fijos y conocidos.

Pero estoy perplejo en cuanto a cómo convertir algo similar a la anterior con el código,

inputObject.firstName.equals("Steve") && inputObject.lastName.equals("Vai")

¿Alguna pista, pensamientos es muy apreciada!

OscarRyz:

Puede utilizar la introspección para evaluar campos en tiempo de ejecución

Se vería algo como esto

Command command = parseJson(input); // transform input into a java object
InputObject o = getItFromSomewhere();    
bool finalResult;


// process each rule
for ( Rule r: command.rules ) {

   var fieldValue = o.getClass().getField(r.field).get(o);

   var currentResult;
   switch(r.operator) {
      case "=": currentResult = fieldValue.equals(r.value);
      break;
      case ">": currentResult = .... 
      ..etc
    } 

    // combine it with previous results; 
    switch(command.combinator) {
      case "and": 
         finalResult = finalResult && currentResult;
         break;
       case "or":
          finalResult = finalResult || currentResult;
     }

}
System.out.println(finalResult);

Obviamente, esto no es el código exacto, pero sólo para mostrar cómo recuperar dinámicamente un valor de campo en tiempo de ejecución y evaluarla.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=375129&siteId=1
Recomendado
Clasificación