Grails:NullPointerException while save()

Grails:NullPointerException while save(),grails,Grails,我是Grails新手,我试图通过在*service.groovy中调用save()来保存域对象,如下所示 render " ${user.username}" render " ${user.email}" render " ${user.password}" def savedUser = user.save(flush: true) if(savedUser!=null) { return savedUser } else { return user } 渲染显示所有元素都

我是Grails新手,我试图通过在
*service.groovy
中调用
save()
来保存域对象,如下所示

render " ${user.username}"
render " ${user.email}"
render " ${user.password}"
def savedUser = user.save(flush: true)
if(savedUser!=null) {
    return savedUser
} else {
    return user
}
渲染显示所有元素都具有从控制器传递的值。 但是save()中会抛出一个NullPointerexception。 得到的实际错误是

错误。GrailExceptionResolver-处理请求时发生NullPointerException:[POST]

可能发生了验证错误,但我使用命令类检查了控制器中的所有验证错误


如何避免这里的异常?

这是非常不标准的代码。检查是否存在验证错误比检查空返回值更常见(而且更合理/更有用)。例如

user.save(flush: true)
if (user.hasErrors()) {
   // do something with the invalid "user" instance
}
else {
   // do something with the valid "user" instance
}
对于您的场景,您可以忽略返回值,只处理原始实例:

user.save(flush: true)
return user

如果您使用的是标准模板(或类似的模板),那么这应该可以正常工作,因为其中有逻辑来检查是否存在附加错误并显示它们。

您能否从服务类中添加上述逻辑的完整实现?渲染通常在控制器中使用,而不是在服务类中使用。没有了解验证语句。如果你看到任何错误,如果你尝试任何错误,如果你尝试“代码>用户。保存(刷新:true,ValnError:true)< /代码>。我检查了所有这些用户。保存(刷新:true),用户。保存(验证:false),用户。保存(深度验证:false),但仍然显示NulpItIn。你可以考虑在代码< > CONFIG.Groovy < /C>中输入<代码> Grave.GoR.ValnOrrale= true >代码>。尽早失败…在全球范围内使用
failOnError
是一个非常糟糕的主意。异常非常昂贵,在Groovy中更是如此,对于非异常情况(如填写表单和提交数据时出现用户错误),生成不必要的异常不是一个好主意。只需检查是否存在验证错误-它与try/catch基本相同,并且不会产生填充所有未使用的堆栈帧的运行时成本。