【发布时间】: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