考虑下面的代码片段,我试图调用一个可以用作键的propertiesContainer方法。
@Cacheable(value = EhCacheManagerApi.CACHE_X_TOKEN, key = ("#{propertiesContainer.getId()}"))
public String getToken(PropertiesContainer propertiesContainer)
我似乎无法弄清楚键的正确spel表达式,当前格式给了我:
org.springframework.expression.spel.SpelParseException: EL1043E:(pos 1): Unexpected token. Expected 'identifier' but was 'lcurly({)'
在我尝试key = ("#propertiesContainer.id")
和key = ("#propertiesContainer.getId()")
propertiesContainer是一个方法getId
返回String
。
所以这可能与使用SpEL的bean方法调用不一样?
答案 0 :(得分:0)
您是否尝试过不带括号的纯表达式:
@Cacheable(value = EhCacheManagerApi.CACHE_X_TOKEN, key="propertiesContainer.id")
这适用于Spring 4.3.3,其中PropertiesContainer是一个带有getId()方法的接口。
此外,如果您在编译的代码中没有调试信息,则可能需要使用#p0.id
而不是方法参数名称。请参阅the accepted answer here,但这会给我一个我怀疑的错误。
答案 1 :(得分:0)
请你试试这个
@Cacheable(value = EhCacheManagerApi.CACHE_X_TOKEN, key = "#{T(java.lang.String).format('%d-%d', #propertiesContainer.id)}")