Apache Верблюд - получить стоимость имущества от тела - PullRequest
0 голосов
/ 31 января 2020

Мне нужно получить значение свойства из тела вызова POST.

Я хочу POST JSON этого типа:

{"key"   : ["test:testValue"
            "keyTest:value"],
"address": "testAddress",
"type"   : "street"}

Прежде чем сохранить сущность, я хочу проверить, содержит ли значение свойства key значение String со значением который содержит символ ":" - какая-то проверка.

В то же время я хочу убедиться, что значение "type" является частью списка Enumeration - некоторая проверка также здесь.

Я пытался использовать simple() или exchange - и validator() для проверки, содержит ли значение : - но безуспешно.

Как узнать значение ключа из тела вызова POST?

1 Ответ

1 голос
/ 01 февраля 2020

Простым решением было бы сначала демаршировать JSON в POJO, а затем проверить POJO с помощью компонента Bean (https://camel.apache.org/components/latest/bean-component.html).

Пример:

.unmarshal().json(JsonLibrary.Jackson, Foo.class)
.bean(new CustomValidator(), "validateFoo")

CustomValidator может быть реализован следующим образом (это только пример, вы можете обновить его в зависимости от ваших требований):

public class CustomValidator {
    public void validateFoo(Exchange exchange) {
        Foo foo = exchange.getIn().getBody(Foo.class);
        if (foo == null || !validKeyList(foo.getKey())) {
            // throw exception
        }
    }

    private boolean validKeyList(List<String> values) {
        for (String value : values) {
            if (value.contains(":")) {
                return true;
            }
        }
        return false;
    }

}

Чтобы это работало, вам нужно добавить верблюда библиотека -jackson (https://mvnrepository.com/artifact/org.apache.camel/camel-jackson).

Информацию о JSON можно найти здесь: https://camel.apache.org/manual/latest/json.html.

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