首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何修复EL1007E:在null上找不到属性或字段'john‘

如何修复EL1007E:在null上找不到属性或字段'john‘
EN

Stack Overflow用户
提问于 2021-09-09 05:22:22
回答 1查看 198关注 0票数 0

当我输入地址栏时:http://localhost:8080/greeting?name=john

我知道: EL1007E:属性或字段'john‘在null上找不到

当我将String message = (String) exp.getValue();更改为String message = (String) exp.toString();时,我注意到得到了正确的输出

这一切为什么要发生?我使用getValue()错误吗?

代码语言:javascript
代码运行次数:0
运行
复制
@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();
    ExpressionParser parser = new SpelExpressionParser();

    @GetMapping("/greeting")
    public @ResponseBody Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
        
        
        Expression exp = parser.parseExpression(name);
        String message = (String) exp.getValue();
        System.out.println(message);
        return new Greeting(counter.incrementAndGet(), String.format(template, message));
    }
    
    @GetMapping("/number/{id}")
    public Greeting number(@PathVariable int id) {
        int[] myArray = {897, 56, 78, 90, 12, 123, 75};
          String message = "Element in the given index is :: "+myArray[id];
          System.out.println(message);
          return new Greeting(counter.incrementAndGet(), String.format(template, message));
    }
    
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-09 05:50:11

代码语言:javascript
代码运行次数:0
运行
复制
Expression exp = parser.parseExpression(name);
String message = (String) exp.getValue();

这是不起作用的,因为在您的示例中,最终的parseExpression将与此parser.parseExpression(john)类似,在计算表达式时,spring将尝试在您没有提供的计算上下文中找到名为john的属性,并且由于它没有找到任何名为john的属性,因此会抛出一个异常。

解决方案

  • 如果您在控制器中接收到某个属性名,并且该属性存在于某个类的对象中,并且您希望获得该属性的值,则可以编写如下代码。
代码语言:javascript
代码运行次数:0
运行
复制
  Expression exp = parser.parseExpression("'"+name+"'");
  String message = (String) exp.getValue(new User());

  public static class User {
    public String john = "Value of john property";
  }

上面的代码将检查给定的john类对象中的User属性,当它被找到时,它将返回属性的值。

  • 如果您只是试图通过计算表达式获得相同的值john,您可以按以下方式编写修改代码(这没有任何意义,但您可以实现它)
代码语言:javascript
代码运行次数:0
运行
复制
 Expression exp = parser.parseExpression("'"+name+"'"); // parser.parseExpression("'john'");
 String message = (String) exp.getValue();

您可以在SpEL表达式这里上面阅读更多内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69112635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档