Как бороться с ContraintViolationException и другими исключениями - PullRequest
0 голосов
/ 23 октября 2018

У меня есть такой верблюжий маршрут:

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 и отправляем его в конечную точку jpaDetailsUri.

Это работает должным образом, если объект Status был успешно сохранен.В случае ConstraintViolationException, т. Е. Уникальный ключ для сущности Status уже существует, это вызовет исключение, у меня не будет правильного statusId, и я больше не смогу обновлять соответствующую сущность StatusDetails.

Конечно, я мог бы справиться с этим в методе process (), но каков был бы "верблюжий путь", чтобы справиться с этим?

1 Ответ

0 голосов
/ 23 октября 2018

верблюжий способ справиться с такими вещами будет использовать onException:

 onException(ConstraintViolationException.class)
     .process(e -> {e.getIn().setBody(new ErrorObjectJson());})
     .handled(true)

проверить документацию

Существует также try-catch способ обработки исключений, предоставленных верблюдом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...