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;
    }
}

它既不漂亮也不优雅,但它确实有效。
如果你有更优雅的请告诉我!