gpt4 book ai didi

grails - 如何在 groovy 方法中处理多种返回类型?

转载 作者:行者123 更新时间:2023-12-02 13:58:12 25 4
gpt4 key购买 nike

我需要有一种方法来在成功的情况下返回 Id 并在失败的情况下返回错误列表。
前代码片段:

def save = {
def errors = []
if(Employee.save(flush:true)){
return Employee.id
}else{
errors.add("Can't be saved")
return errors.
}

}

在服务类
调用
Employee.save() - .. 那么如何检查 save 方法返回的是错误还是 id

任何建议将不胜感激。

最佳答案

不要这样做——即使你可以让它在 Groovy 中更有用,这也是一个坏主意。不过,在这种情况下,有一些简单的解决方案。如果您只是传递 Employee 实例并将其保存在服务方法中,则不需要返回任何内容:

void save(Employee employee) {
employee.save(flush:true)
}

这是因为如果成功了,id 会被设置在你传入的实例上,否则会在 errors 中出现一个或多个验证错误。属性(当有实际有用的错误消息可用时,您无需返回通用错误消息)。

例如,这将是您在调用服务的 Controller 中拥有的代码:
def employee = new Employee(...)
fooService.save(employee)
if (employee.hasErrors()) {
// do something with employee.errors
}
else {
// success - use the id if you need via employee.id
}

如果你想传入数据来创建和保存新实例并返回一个员工(这是我通常采用的方法),它是类似的:
Employee save(String name, int foo, boolean bar, ...) {
Employee employee = new Employee(name: name, foo: foo, bar: bar, ...)
employee.save(flush:true)
return employee
}

在第二种情况下,重要的是将 save 分开。调用和 return , 因为如果存在验证错误 save返回 null并且您希望始终返回一个非空实例。所以不要这样做:
return employee.save(flush:true)

如果将它们分开,则可以检查错误和/或 ID。

另外,请确保您不会像在代码中那样在服务中使用闭包( def save = { ... )。只有方法是事务性的,因为 Spring 事务处理不知道 Groovy 闭包——它们只是 Groovy 调用的字段,就好像它们是方法一样,但它们不是。

关于grails - 如何在 groovy 方法中处理多种返回类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10327091/

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