我有这样的骆驼路线:
this.from(uri).process(e -> {
String json = e.getIn().getBody(String.class);
JsonObject message = gson.fromJson(json, JsonObject.class);
Status status = gson.fromJson(message.get("data"), Status.class);
e.getIn().setHeader("JSON_OBJECT", message);
e.getIn().setBody(status);
}).to(jpaStatusUri).process(e -> {
JsonObject message = (JsonObject) e.getIn().getHeader("JSON_OBJECT");
StatusDetails details = gson.fromJson(message.get("data"), StatusDetails.class);
// If the first route was successfull i can get the id of the inserted entity here (this works)
details.setStatusId(e.getIn().getBody(Status.class).getId());
e.getIn().setBody(details);
}).to(jpaDetailsUri);
我将实体Status
发送到jpa端点jpaStatusUri
。插入该实体,然后在下面的process()
方法中创建一个相应的StatusDetails
实体,将其statusId设置为先前保存的Status
的ID,然后将其发送到{{1} }端点。
在jpaDetailsUri
实体已成功保存的情况下,这可以按预期工作。如果Status
即ConstraintViolationException
实体的唯一键已经存在,则将引发异常,我将没有正确的Status
并且我将无法更新相应的键statusId
实体了。
我当然可以在process()方法中处理此问题,但是处理此问题的“骆驼方式”是什么?
答案 0 :(得分:1)
处理此类问题的一种方法就是使用onException
:
onException(ConstraintViolationException.class)
.process(e -> {e.getIn().setBody(new ErrorObjectJson());})
.handled(true)
骆驼还提供了try-catch处理异常的方法。