当前位置: 首页 > 知识库问答 >
问题:

Spring@cacheable with SpEL key:始终计算为空

单于楚
2023-03-14

我对@Cacheable和使用一个基于Spring表达式语言的自定义键有问题。我有以下代码

@Cacheable(value = "myCache", key = "#providerDTO.identifier")
ClientVO loadClientVOByProviderDTO(ProviderDTO providerDTO);

这将引发以下错误

org.springframework.expression.spel.SpelEvaluation Exception: EL1007Epos 0): Field or property 'identifier' cannot be found on null
@Cacheable(value="books", key="#isbn.rawNumber")

我也尝试过静态方法。这将引发NullPointerException,因为providerDTO在此处为null。

public static String cacheKey(ProviderDTO providerDTO)                                                                                                                                                                                                                    
{                                                                                                                                                                                                                                                                         
    return providerDTO.identifier + "-" + providerDTO.clientID + "-" + providerDTO.clubID;                                                                                                                                                                            
}

我如何调试它来找出发生了什么?这是Spring 3.2.4版本。@cacheable标记在一个接口上,但我使用的是标准的spring AOP,而不是AspectJ,因此据我所知,这仍然可以很好地工作。

共有1个答案

韦宣
2023-03-14

spelEvaluationException的可能重复:el1007e:(pos43):在null和spring@cacheable上找不到字段或属性“group”,使用Ehcache,spel find null for valid object-我相信您编译时没有调试信息。请检查您的Maven配置;你可能想在这里贴出相关的片段。在您的POM(或父POM)中搜索maven-compiler-plugin和以下一行:

<debug>false</debug>
 类似资料:
  • 我将Spring Boot版本='1.4.0.rc1'与Spring Boot Stormpath 1.0.2一起使用。 我试图使用多部分文件上传,但MultipartFile在控制器中总是为空。 这是控制器,在下面的代码中,总是成功,总是失败: 我的集成测试使用改型: 我使用自动配置,所以我唯一的自定义配置类配置StormPath: 更新:这是传出请求。我不确定如何在多部分解析器本身中启用日志记

  • 我正在尝试使用REST服务设置一个简单的html和Spring 3.0.6上传。我已经在线学习了本教程,但MultipartFile参数始终为空。以下是配置和代码: application-context.xml: pom.xml: html: Rest控制器: 我复制了Spring教程中的示例,但无论我做了什么更改,file参数始终为null。“名称”将在文本框中具有值,但文件将为空。 我也尝试

  • 创建从到的OneToMany关系

  • 我是Android开发的新手,我的Android Studio 3.1.3演示项目或我创建的任何项目都有这个问题。 尽管我可以在我的设计视图(ConstraintLayout)上拖放不同的控件,但在设计视图上没有显示任何内容,但它会显示一秒钟,然后消失。 我可以看到所有的元素,我拖放在activity_main.xml文本选项卡,组件树,甚至在运行模式,但不是在设计选项卡,什么都没有显示在设计视图

  • 下面是片段。请注意,我已经恢复到以前的提交,因此丢失了最近的修改,但请查看我编写的代码,然后才注意到始终等于0() 以下是当检测到活动后按: 以下是NoteActivity接收结果调用的方式。 null 我在我的项目上浪费了很多重要的时间,只是想知道是什么使resultCode和requestCode的值丢失了我发送的值。 任何帮助和指导都将不胜感激。非常感谢!

  • 我已经检查了IntelliJ的调试器,并且可以确认mockMvc本身为空。因此,异常消息告诉我的只是“java.lang.NullPointerException”。 我已经尝试过为测试类添加更通用的Spring Boot注释,比如“@SpringBootTest”或“@RunWith(SpringRunner.class)”,以防与初始化Spring有关,但没有成功。