gpt4 book ai didi

grails - 服务回拨给 Controller ?

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

Grails使 Controller 很容易调用服务,并且 Controller 将请求转发到另一个 Controller 也很容易。

因此,假设您有这样的服务方法

List<String>  updateNames() {
...
}

您可以从任何 Controller 很容易地调用它。

我想知道,如果您有一个极端的情况,您意识到服务方法中存在验证问题。您不想将异常返回给 Controller ,因为这实际上不是异常(exception)。但是您无法将错误消息从服务返回到调用的 Controller ,因为这将意味着您必须使用一些包装对象而不是漂亮的List

无论如何,在这些情况下,您可以让服务将服务器端转发到另一个 Controller 上,这可能会向用户返回错误响应?

谢谢。

最佳答案

Grails在您的bean中已经具有一种用于验证的结构,称为Errors(来自Spring)。例如,如果您具有上传文件的服务,则可以轻松地在您的bean中附加验证错误:

class UploadService {
void doUpload(MultipartFile file, MyDomainClass domainClassInstance) {
if(validationsFail) {
domainClassInstance.errors.rejectValue("myUploadField","my.i18n.code")
}
}
}

如果不是域类,则可以考虑使用 command object,因为它们也是可验证的。

在您的 Controller 中,这只是检查您的实例是否有错误的方法:
def upload() {
MyDomainClass instance = ...
uploadService.doUpload(request.getFile('file'), instance)
if(!instance.hasErrors()) {
//save and go on...
}
}

另一个选择是使用@Joshua Moore回答的异常。只记得扩展 RuntimeException即可。否则,您的交易将不会自动回滚。

关于grails - 服务回拨给 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23107546/

25 4 0