gpt4 book ai didi

java - SpEL 无法转换为 map

转载 作者:行者123 更新时间:2023-11-30 06:59:34 25 4
gpt4 key购买 nike

阅读了有关 Spring 表达式语言“Inline Maps”的文档后,我将一个对象传递给 SpelExpressionParser 并 .toString()ing Object,所以说话;但是,这样做时,我收到以下错误:

org.springframework.expression.spel.standard.SpelExpression cannot be cast to java.util.Map

作为参数传递给 .parseExpression 函数的 Object 是注释 @PreAuthorize("hasPermission(#object, {name: 'roofus', animal: 'dog'})“附加”到一个方法。

通过PermissionEvaluator interface实现,它以其 Object 形式传递给一个方法:

private boolean doSomething (Object animal) { //....

在此方法中找到了一个@Autowired SpelExpressionEvaluator。这是按以下方式使用的:

Map animalMap = (Map) parser.parseExpression(animal.toString());

通过调试,我知道 .toString() 方法的结果是:{name=roofus, animal=dog}

导致上述错误。我错过了什么吗?目标是能够传入“JSON”风格的 String(由链接文档指定)以用于评估目的。

最佳答案

parser.parseExpression 无法独立于环境返回 Map 的问题。

看来您对架构有一点误解。 SpelParser 用于从String 构建Expression 对象。之后,您可以使用其 getValue() 方法之一评估该表达式。

所以,只有在求值之后你才能得到你的 Map 对象:

Expression expression = parser.parseExpression("{name: 'roofus', animal: 'dog'}");
Map map = expression.getValue(Map.class);

关于java - SpEL 无法转换为 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31434208/

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