Esta regla marca el uso de
org.springframework.expression.spel.support.SimpleEvaluationContext
con Expression.getValue(...).
En Spring Framework 6.0, SimpleEvaluationContext se cambió para deshabilitar completamente las asignaciones de matrices en SpEL alineándose con el comportamiento estándar de resolución de constructores. Este cambio afecta al código que utiliza SimpleEvaluationContext para evaluar expresiones SpEL que crean matrices explícitamente o llaman a métodos con parámetros varargs.
Al migrar a Spring 6, revise todas las llamadas a
Expression.getValue(...) donde a
SimpleEvaluationContext . Asegúrese de que las expresiones SpEL evaluadas no se basan en funciones no admitidas en
SimpleEvaluationContextcomo creación de arrays o llamadas a métodos varargs.
Si su caso de uso requiere la creación de matrices o llamadas a métodos varargs en una expresión SpEL, puede cambiar de
SimpleEvaluationContext por:
StandardEvaluationContexto refactorice sus expresiones SpEL para evitar por completo este tipo de construcciones.
El siguiente ejemplo muestra el uso que se marcará, porque
SimpleEvaluationContext se pasa a
Expression.getValue(...). Aunque las expresiones mostradas pueden fallar en tiempo de ejecución en Spring 6 debido a características no soportadas como la creación de arrays o varargs, esta regla marca el uso del contexto en sí mismo, independientemente de la expresión expresión.
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.SimpleEvaluationContext;
public class InvalidSpelArrayUsage {
public void failAtRuntime() {
SimpleEvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
ExpressionParser parser = new SpelExpressionParser();
parser.parseExpression("new String[1]").getValue(context); // Should be flagged
parser.parseExpression("join('a', 'b', 'c')").getValue(context); // Should be flagged
}
}
El siguiente ejemplo muestra un uso válido en el que
StandardEvaluationContext se utiliza, que admite todas las funciones de SpEL.
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
public class ValidSpelUsage {
public void worksCorrectly() {
StandardEvaluationContext context = new StandardEvaluationContext();
ExpressionParser parser = new SpelExpressionParser();
parser.parseExpression("new String[1]").getValue(context); // allowed
parser.parseExpression("join('a', 'b', 'c')").getValue(context); //allowed
}
}
Para obtener más información, consulte los recursos siguientes: