【问题标题】:Null Pointer Exception and Null Objects空指针异常和空对象
【发布时间】:2011-08-07 07:35:02
【问题描述】:

我有以下几行代码:

def edit = {
        if (session.user.id != params.id){
            flash.message = "You can only edit yourself."
            redirect(action:list)
            return
            }
        def user = User.get(params.id)
            if (!user){
                flash.message = "Login first before you edit anyone."
                redirect(action:list)
                }
            else{
                return [user:user]
                }
        }

我对 groovy 和 grails 还很陌生,所以请放轻松。 无论如何,上述代码仅在用户登录该站点时才有效。 当用户在未登录的情况下尝试编辑某些内容时,User.get(params.id) 会引发异常。这反过来又向我展示了以下内容:

java.lang.NullPointerException: Cannot get property 'id' on null object

    at com.hyun.UserController$_closure4.doCall(UserController.groovy:25)

    at com.hyun.UserController$_closure4.doCall(UserController.groovy)

    at java.lang.Thread.run(Thread.java:662)

问题是我该如何正确处理这个问题?我相信答案就在这些地方:

if (!user){
                flash.message = "Login first before you edit anyone."
                redirect(action:list)
                }

但我真的不知道如何解决这个问题。请帮我! Flash.message 未按预期工作。

【问题讨论】:

    标签: grails groovy nullpointerexception


    【解决方案1】:

    我相信 Tomas Lycken 是对的,试试这个吧:

    if (session?.user?.id != params.id)
    

    关于safe navigation operator (?.)的更多详情。

    【讨论】:

    • :D 谢谢!我一直在考虑用猫王算子,哈哈!解决了我的问题!
    • 我刚刚看了这个答案并使用了安全导航,它也适用于我的问题
    【解决方案2】:

    我不是 groovy 或 grails 方面的专家(我实际上从未使用过任何一个...),但我认为问题在于您要做的第一件事是检查 session.user.id(在您的第一个 @987654322 @ 子句)。如果用户没有登录,session.user 可能会返回null,这使得对.id 的调用会抛出你看到的异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-22
      • 2018-06-07
      • 2018-09-13
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      相关资源
      最近更新 更多