You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Spring应用EL1007E错误:null上找不到属性或字段'john'

错误原因分析

你遇到的EL1007E错误本质是SpEL(Spring表达式语言)的执行逻辑和你的预期不符导致的:

  • 你将请求传入的name参数(比如示例中的john)直接解析为SpEL表达式,随后调用无参的exp.getValue()方法执行表达式
  • 无参的getValue()方法没有指定表达式执行的根对象,SpEL会默认使用null作为根上下文
  • 此时SpEL会把john这个表达式识别为「读取根对象下名为john的属性/字段」,根对象为null的情况下自然找不到对应的属性,就抛出了Property or field 'john' cannot be found on null的错误
getValue()方法使用是否有误

是的,你对getValue()的使用场景存在误解:
Expression.getValue()系列方法的作用是执行表达式并返回计算后的结果,不是返回表达式本身的原始字符串。如果你的需求就是直接拿到传入的name参数值作为内容,完全不需要调用SpEL相关的API,直接使用方法入参的name变量即可。你当前改成exp.toString()能得到正确结果,本质是因为这个方法刚好返回了你传入的原始表达式字符串,属于巧合满足需求,并没有用到SpEL的实际能力,还多了不必要的性能开销,同时如果后续你误用getValue()还会存在SpEL注入的安全风险。

优化建议:直接删除SpEL相关代码,将greeting接口的逻辑改成如下即可:

@GetMapping("/greeting")
public @ResponseBody Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
    System.out.println(name);
    return new Greeting(counter.incrementAndGet(), String.format(template, name));
}

内容的提问来源于stack exchange,提问作者Fabian Amran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:09:00