【问题标题】:Return json encoded payload from exception strategy从异常策略返回 json 编码的有效载荷
【发布时间】:2013-11-06 19:20:39
【问题描述】:

我正在尝试使用 Mule 3.4.0CE 来提供 RESTful API,并评估 Jersey 和 Rest-router 模块来处理这个问题。这大部分进展顺利,但我没有找到在 Mule 中实现 RESTful API 的具体/完整示例。

目前,对于使用 rest-router 工作的实体,我有简单的 GET 和 PUT 端点。 PUT 流成功地将内容传递给 JDBC,但我对如何处理实体已经存在的情况感到困惑。

我可以依靠 SqlException 来捕获 pk 约束违规并有一个异常策略处理:

<catch-exception-strategy when="#[exception.causedBy(java.sql.SQLException) and exception.getCauseException().getMessage().contains('Duplicate entry')]" doc:name="Duplicate_entry1">
          <set-payload value="The request cannot be processed, the error is #[exception.getSummaryMessage()]" doc:name="Set Payload"/> <!-- [1] -->
          <set-property propertyName="http.status" value="400" doc:name="Property"/> <!-- [2] -->
</catch-exception-strategy>

但我对两件事感到困惑:

1) 捕获更具体的异常? 我能够获得与 java.sql.SQLException 匹配的异常策略,但宁愿匹配 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException 的根本原因。使用该类和各种形式的 casusedBy()、causeExactlyBy() 和 casueMatches() 似乎除了外部 SQLException 之外找不到任何东西。

2) 如何返回一个简单的 json 编码的有效载荷来响应这个错误? 我想在 catch-exception-strategy 中做的是创建 KV 对的映射,例如 status="error" 和 error_message="entity XX already exists" 并将该 json 编码为 mule 有效负载/响应。

让我感到尴尬的是,我似乎无法想出一种方法来简单地使用 MEL 或 MuleStudio 中的各种组件来做到这一点。寻找有关如何执行此操作的指针或文档。我拒绝构建一个自定义组件来返回我想要的地图,并在离开 Mule 的路上对该 json 进行编码。

【问题讨论】:

    标签: mule


    【解决方案1】:

    For 1) 在您的 when 子句中,您可以使用 org.mule.util.ExceptionUtilscontainsType() 方法(构建在 Apache ExceptionUtils 类之上) .它检查整个堆栈跟踪是否存在特定异常。
    如果您不想在 MEL 中提供完全限定的类名(对于 ExceptionUtils),您可以使用全局导入功能,在 MEL Cheat Sheet 的最后部分中进行了描述。

    我已经发表了两篇关于 Mule 上的 RESTful 服务的博文(here & here)。也许,您会发现它们很有用。

    【讨论】:

      【解决方案2】:
      猜你喜欢
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多