gpt4 book ai didi

grails - 在grails Controller 中关闭不接受参数

转载 作者:行者123 更新时间:2023-12-02 15:29:41 26 4
gpt4 key购买 nike

我正在尝试使用实用程序闭包在 Controller 中整合冗余代码,以进行通用的异常处理程序和响应生成。
例如,我要巩固这一点:

def newUser(){
def model = [:]
def errors

try{
model += [newUserObj:dao.newUser(...)]
}catch(Exception e){
errors = e.getMessage()
}
renderJson(model,error)
}
..为此:
def newUser(){
def model = [:]
def errors
doRequest(model, errors){ ->
model += [newUserObj:dao.newUser(...)]
}
}
..在将样板代码移动到闭包时:
def doRequest(model, errors, clsr){
try{
clsr.call()
}catch(Exception e){
errors = e.getMessage()
}
//!! model here is null !!
renderJson(model,error)
}
当调用 doRequest()时,该问题会在 renderJson()中发生。 model为null,即使我确认已在 model += [newUserObj:dao.newUser(...)]的闭包内正确分配了它。
解决方法
我设法通过从闭包中返回 model来解决此问题:
def newUser(){
doRequest(){ ->
def model = [:]
def errors
model += [newUserObj:dao.newUser(...)]
[model:model, errors:errors]
}
}

def doRequest(clsr){
def model = [:]
def errors
try{
def r = clsr.call()
model = r['model']
errors = r['errors']
}catch(Exception e){
errors = e.getMessage()
}
renderJson(model,error)
}
..但是这似乎根本不是Groovy的,我首先创建了我想避免的样板代码。

最佳答案

这是您要找的东西吗?

import grails.converters.JSON

//Closure implementation
def doRequest(Closure clsr) {
def model = [:]
def errors = /No Error Message Yet/

try {
model = clsr(model)
} catch(Exception e) {
errors = e.getMessage()
}

renderJson(model, errors)
}

//Mimics an action method
def newUser() {
doRequest { model ->
model += [a:1] //Mimics the call to DAO in your question

//make sure to return the model after all operations completed
//model
}
}

//Mimics the render to JSON utility
private JSON renderJson(model, error) {
[model: model, errors: error] as JSON
}

//Mimics call to the action method
assert newUser().toString() ==
/{"model":{"a":1},"errors":"No Error Message Yet"}/

我本可以实现 doRequest(),如下所示,但我没有这样做,因为在那种情况下,模型和错误将成为我们不希望的类的一部分(在您的情况下,它将是Controller的全局属性)。
def doRequest(Closure clsr) {
try {
clsr.resolveStrategy = Closure.DELEGATE_FIRST
clsr.delegate = this

clsr()
} catch(Exception e) {
errors = e.getMessage()
}

renderJson(model, errors)
}

关于grails - 在grails Controller 中关闭不接受参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21504978/

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