@Service
@Slf4j
public class Test {
private String dynamicSPELStr = "#{${test.spel.map}.default}";
@Autowired
private Environment environment;
void testSPEL() {
ExpressionParser parser = new SpelExpressionParser();
log.info("[PARSER] {}", parser
.parseExpression(environment.resolvePlaceholders(dynamicSPELStr))
.getValue());
}
}
Expression [#{{default: '5', key1: '10', key2: '20', key3: '40'}.default}] @1: EL1043E: Unexpected token. Expected 'identifier' but was 'lcurly({)'
使用@value
运行相同的表达式可以正常工作。
@value
注释的value
属性不是SpEL表达式。它支持使用${...}
的占位符,并支持使用#{...}
的SpEL表达式。
只有#{
和}
之间的文本才是SpEL表达式。因此,从DynamicSpelStr
字符串中删除#{
和}
:
private String dynamicSPELStr = "${test.spel.map}.default";
错误解释
#或$对我来说无关紧要 通常在Spring中,您可以将属性注入bean,我已经成功了。但是现在我希望用户输入一个模板字符串,可以使用应用程序上下文中的所有属性进行翻译。目前我不需要访问bean属性,但将来我可能需要。以上是定义文件夹路径时最常见场景的简化变体。运行时参数(例如,一天中的时间)增加的复杂性很小,但我问的问题是一步一步地工作。 因此,我试图在JUnit的帮助下,通过玩Spring表达式
问题内容: 我正在使用NewtonSoft JObject解析JSON字符串。如何以编程方式从动态对象获取值?我想简化代码,以免对每个对象重复说明。 有什么办法可以将“ if”语句中的代码块提取到单独的方法中,例如: 甚至有可能因为我们不能对动态对象使用反射。还是我甚至正确使用了JObject? 谢谢。 问题答案: 假设您正在使用Newtonsoft.Json.Linq.JObject,则不需要使
问题内容: 有没有办法以编程方式对JTable进行排序? 我的JTable排序工作正常(使用setRowSorter),以便当用户按任意列时,表将被排序。 我知道,SWingX JXTable可能可以工作,但我不想麻烦,因为其他所有事情现在都可以正常工作,而且我不知道NetBeans的可视化编辑器如何处理JXTable等。 编辑: 选定的答案是指我的声明(现已删除),该声明对Sun的页面的答案不起
我如何以编程方式验证Google?既然ClientLogin(https://developers.Google.com/accounts/docs/authforinstalledApps)已被否决,那么我们如何使用OAuth2对Google执行编程身份验证呢? 使用ClientLogin,我们可以使用电子邮件和密码参数执行到https://www.google.com/accounts/Cli
问题内容: 我们使用下面的代码从属性文件中注入具有属性的Spring bean。 有没有一种方法可以通过编程方式访问属性?我试图做一些没有依赖注入的代码。所以我只想要一些这样的代码: 问题答案: 怎么样?
问题内容: 我在映射中有一个与预先加载的集合的关联(lazy =“ false” fetch =“ subselect”)。进行查询时,如何使用Hibernate以编程方式将其关闭? 问题答案: 实际上,这应该是相反的。您可以在映射中将其关闭,并在特定用例中通过查询中的“提取”来激活它。 这就是Hibernate团队看到它的方式。Hibernate中无法创建为属性指定“ no-fetch”的请求…