gpt4 book ai didi

grails - 保存Grails GORM/Domain类将生成 `NullPointerException`

转载 作者:行者123 更新时间:2023-12-02 14:00:53 26 4
gpt4 key购买 nike

当注册页面成功填写后,我有一项服务负责创建相关的帐户层次结构:

    def userRole = Role.findByAuthority("ROLE_USER")
final account = new Account(email: command.email, password: command.password)
account.save(flush: true)

final publisher = new Publisher(name: command.name) //, account: account)
publisher.save(flush: true)

final accountRole = AccountRole.create account, userRole

无论我做什么, AccountRole.create account, userRole在此行均失败:
static AccountRole create(Account account, Role role) {
def instance = new AccountRole(account: account, role: role)
instance.save() // throws NullPointerException
instance
}

我已经尝试过 new AccountRole(account: account, role: userRole),但是当我手动调用 save时,它也失败了。 AccountAccountRole是由Grails 3 Spring Security插件生成(并稍作调整)的类。

这是 AccountRole.create(...)调用失败的堆栈跟踪:
java.lang.reflect.InvocationTargetException: null
at grails.plugin.springsecurity.web.UpdateRequestContextHolderExceptionTranslationFilter.doFilter(UpdateRequestContextHolderExceptionTranslationFilter.groovy:64)
at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.groovy:53)
at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:62)
at grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.groovy:58)
at grails.plugin.springsecurity.web.filter.DebugFilter.invokeWithWrappedRequest(DebugFilter.groovy:102)
at grails.plugin.springsecurity.web.filter.DebugFilter.doFilter(DebugFilter.groovy:69)
at grails.plugin.springsecurity.web.UpdateRequestContextHolderExceptionTranslationFilter.doFilter(UpdateRequestContextHolderExceptionTranslationFilter.groovy:64)
at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.groovy:53)
at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:62)
at grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.groovy:58)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException: null
at package.AccountRole.create(AccountRole.groovy:48)
at package.RegistrationService.$tt__handleNewRegistration(RegistrationService.groovy:25)

版本信息:
| Grails Version: 3.1.5
| Groovy Version: 2.4.6
| JVM Version: 1.8.0_73

请救我脱离痛苦!我现在已经花了几个小时:(

最佳答案

确实没有足够的信息来确保,但是instance不太可能为空,因为您只是通过构造函数调用创建了它,但是您应该检查以确保例如

static AccountRole create(Account account, Role role) {
def instance = new AccountRole(account: account, role: role)
println "instance null? ${instance == null}"
instance.save() // throws NullPointerException
instance
}

验证期间的问题更有可能导致异常,所以我的猜测是 userRoleaccount出了点问题。检查是否正确检索了 userRole,以及帐户 save()调用是否没有验证错误:
def account = new Account(email: command.email, password: command.password)
account.save(flush: true)
if (account.hasErrors()) {
log.warn "Failed to save Account $account: $account.errors"
}

关于grails - 保存Grails GORM/Domain类将生成 `NullPointerException`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37236629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com