You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GeneXus:将BC Transaction暴露为REST服务后批量返回所有验证规则信息

如何让GeneXus REST服务一次性返回所有验证错误信息

默认情况下,GeneXus 将 BC Transaction 暴露为 REST 服务时,会采用「快速失败」模式——遇到第一条验证错误就立即返回响应,不会继续检查后续规则。要实现一次性返回所有验证错误,需要手动替换默认验证逻辑并自定义异常处理:

1. 自定义批量验证逻辑

放弃依赖 GeneXus 自带的属性级空值验证规则,改用手动批量检查并收集错误:

  • 先创建一个结构化类型和对应的集合,用于存储多条错误信息:
    Structured Type ValidationError
        Attribute FieldName Type Character(50) // 出错字段名
        Attribute Message Type Character(200) // 错误提示信息
    EndType
    
    Collection Type ValidationErrorCollection Of ValidationError
    
  • 在 Transaction 的 BeforeSave 事件中,逐个检查所有需要验证的属性,将错误逐条加入集合:
    Event BeforeSave
        &ValidationErrors = New()
    
        // 检查客户ID是否为空
        If &CustomerId.IsEmpty()
            &NewError = New()
            &NewError.FieldName = "CustomerId"
            &NewError.Message = "客户ID不能为空"
            &ValidationErrors.Add(&NewError)
        EndIf
    
        // 检查客户名称是否为空
        If &CustomerName.IsEmpty()
            &NewError = New()
            &NewError.FieldName = "CustomerName"
            &NewError.Message = "客户名称不能为空"
            &ValidationErrors.Add(&NewError)
        EndIf
    
        // 可继续添加其他属性的验证逻辑...
    
        // 若存在错误,抛出带错误集合的自定义异常
        If &ValidationErrors.Count > 0
            Throw Exception(&ValidationErrors, "ValidationFailed")
        EndIf
    EndEvent
    

2. 自定义REST异常处理器

默认的异常处理器只会返回单条错误,需要自定义处理器来捕获上述自定义异常并返回完整错误集合:

  • 创建异常处理类,实现对ValidationFailed异常的解析和响应构建:
    Class RESTExceptionHandler
        Public Function HandleException(&Exception As Exception) As HttpResponse
            &HttpResponse = New()
    
            // 捕获自定义验证异常
            If &Exception.Id = "ValidationFailed"
                &HttpResponse.StatusCode = 400 // 标记为请求错误
                &HttpResponse.Body = Serialize(&Exception.Data) // 序列化错误集合为JSON
                &HttpResponse.ContentType = "application/json"
            Else
                // 其他异常沿用默认处理逻辑
                &HttpResponse = DefaultExceptionHandler.HandleException(&Exception)
            EndIf
    
            Return &HttpResponse
        EndFunction
    EndClass
    
  • 将该处理器绑定到REST服务:在REST服务的属性设置中,找到「Exception Handler」选项,指定为RESTExceptionHandler。

版本兼容性说明

该方案在 GX16、GX17、GX18 版本中均适用,因为这些版本已支持结构化类型、集合序列化以及自定义REST异常处理器的配置。

内容的提问来源于stack exchange,提问作者DeivisKC_Solution

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:20:32