gpt4 book ai didi

rest - 保存前Grails更新模型

转载 作者:行者123 更新时间:2023-12-02 15:00:50 24 4
gpt4 key购买 nike

我在根据用户角色验证和重置某些字段时遇到麻烦。
我正在尝试使用grails开发rest api,而当我尝试根据用户角色重置某些字段时,就会出现我的问题。我通过PUT将具有所需的“不允许”更改的json发送到 Controller 。我将不允许的字段修改为对我正确的字段,然后调用.save(),“未允许”的字段将使用其发送的值进行更新,而不是使用我修改后的值进行更新。这是代码。

该模型

package phonebook

class User {
String firstName
String lastName
String phoneNo
String address
String email
String password
boolean active = false
String hash
String authToken = ""
String role = "user"

static hasMany = [contacts:Contact]

static constraints = {
firstName(blank: false)
lastName(blank: false)
address(blank: true)
phoneNo(unique: true)
email(blank: false, unique: true)
password(blank: false)
role(blank: false, inList: ["user", "admin"])
hash(blank: true)
authToken(blank: true)
active(inList:[true,false])
}
}

Controller 的方法:
@Transactional
def update(User userInstance) {
if (!isAuthenticated()){
notAllowed()
return
}

if (userInstance == null) {
notFound()
return
}

//if(isAdmin()){
def userBackup = User.findById(userInstance.id)

userInstance.role = userBackup.role
userInstance.active = userBackup.active
userInstance.hash = userBackup.hash
userInstance.authToken = userBackup.authToken
//}

if (userInstance.hasErrors()) {
respond userInstance.errors, view:'edit'
return
}

userInstance.save flush:false

request.withFormat {
'*'{ respond userInstance, [status: OK] }
}
}

通过PUT发送JSON
{
"id":"1",
"firstName": "Modified Name 23",
"role":"admin",
"active":"true",
"hash":"asdasd"
}

上面的代码即使发送,也不能修改我的哈希, Activity 值或角色值。

有任何想法吗?
谢谢。

最佳答案

之所以要保存更改,是因为默认情况下,对域实例所做的任何更改都会在 session 结束时清除。鉴于自动 session 刷新,这被称为打开 session 。我建议您对人们在GORM面临的一些主要问题进行some reading处理。

正确使用discard可能会解决您的问题。在退出 Controller 之前,请放弃实例更改。

例如:

if (!isAuthenticated()){
notAllowed()
userInstance.discard()
return
}

编辑

根据评论中的对话,这也许可以解决您的问题。丢弃和附加的组合。
   userInstance.discard()
def userBackup = User.findById(userInstance.id)

userInstance.role = userBackup.role
userInstance.active = userBackup.active
userInstance.hash = userBackup.hash
userInstance.authToken = userBackup.authToken
userInstance.attach()

关于rest - 保存前Grails更新模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22731351/

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