SPeL - 设置一个应该在空列表中的对象的值
SPeL - set a value of an object which should be in an empty list
我有以下 SPel 表达式:
custData.address[0].postcode
custData
是一个现有对象,但 address
是一个空列表。它是一个现有对象,但它是空的。当我尝试在此路径上设置 post 代码时,我得到了
org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'postcode' cannot be found on null
我需要将新的 address
对象放入列表并设置其 postcode
属性。
SPel表达式可以做到吗?
谢谢,
五、
所以这基本上是一个 NullPointerException。您需要确保您试图从中获取字段值的对象存在。 SPeL 有特殊的运算符 '?'检查对象是否有价值,虽然我不确定它是否适用于数组,但绝对值得一试。在某些对象可能为 null 的一般表达式中,如下所示:
object?.anotherObject?.field
这确保“object”不为 null,如果它有值则获取“anotherObject”并检查它是否也不为 null,然后获取“field”。所以尝试这样的事情:
custData.address[0]?.postcode
最终我在 spel 表达式中使用了自定义函数。
#addIfNecessary(custData.address, 0, "uk.co.acme.AddressType").postcode
用户定义的函数是
import org.springframework.util.ReflectionUtils;
import java.util.List;
public class CustomFunc {
public static Object addIfNecessary(List<Object> list, Integer index, String className) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
Object o = null;
if (list != null) {
if (list.size() <= index || list.get(index) == null) {
list.set(index, Class.forName(className).newInstance());
}
o = list.get(index);
}
return o;
}
}
它既不漂亮也不优雅,但它确实有效。
如果你有更优雅的请告诉我!
我有以下 SPel 表达式:
custData.address[0].postcode
custData
是一个现有对象,但 address
是一个空列表。它是一个现有对象,但它是空的。当我尝试在此路径上设置 post 代码时,我得到了
org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'postcode' cannot be found on null
我需要将新的 address
对象放入列表并设置其 postcode
属性。
SPel表达式可以做到吗?
谢谢,
五、
所以这基本上是一个 NullPointerException。您需要确保您试图从中获取字段值的对象存在。 SPeL 有特殊的运算符 '?'检查对象是否有价值,虽然我不确定它是否适用于数组,但绝对值得一试。在某些对象可能为 null 的一般表达式中,如下所示:
object?.anotherObject?.field
这确保“object”不为 null,如果它有值则获取“anotherObject”并检查它是否也不为 null,然后获取“field”。所以尝试这样的事情:
custData.address[0]?.postcode
最终我在 spel 表达式中使用了自定义函数。
#addIfNecessary(custData.address, 0, "uk.co.acme.AddressType").postcode
用户定义的函数是
import org.springframework.util.ReflectionUtils;
import java.util.List;
public class CustomFunc {
public static Object addIfNecessary(List<Object> list, Integer index, String className) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
Object o = null;
if (list != null) {
if (list.size() <= index || list.get(index) == null) {
list.set(index, Class.forName(className).newInstance());
}
o = list.get(index);
}
return o;
}
}
它既不漂亮也不优雅,但它确实有效。
如果你有更优雅的请告诉我!