gpt4 book ai didi

java - Spring 评估语言(SpEL)在访问映射中的无效键时不会抛出异常

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:21 25 4
gpt4 key购买 nike

我是 SpEL 新手,下面是我用于测试的可行测试示例。

public static void main(String[] args) {

Map<String,String> dictMap = new HashMap<>();
dictMap.put("key", "value");
Map<String, Object> rootObj = new HashMap<>();
rootObj.put("d", dictMap);

ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("['d']['wrongkey']");
String msg = (String) exp.getValue(new StandardEvaluationContext(rootObj), String.class);
System.out.println(msg);
}

我预计表达式应该抛出异常,因为 dictMap 上下文中没有名为“wrongkey”的键。但是,它打印“null”。

是否有任何设置可以用来强制表达式求值抛出异常?

谢谢

最佳答案

不确定为什么应该有异常(exception)。

看看,在这种情况下我们有异常(exception)吗?

dictMap.get("wrongkey");

不,因为 Java 就是这样工作的。 Spring中的SpEL完全基于Java性质。因此,这里它仅委托(delegate)给普通 Java 的 Map.get()

要使其抛出异常,您应该将 MapAccessor 添加到 StandardEvaluationContext 中。并且该逻辑已经具有所需的逻辑,当没有请求的 key 时会抛出异常:

Map<?, ?> map = (Map<?, ?>) target;
Object value = map.get(name);
if (value == null && !map.containsKey(name)) {
throw new MapAccessException(name);
}
return new TypedValue(value);

关于java - Spring 评估语言(SpEL)在访问映射中的无效键时不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46194853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com