Apache Camel-从身体获取财产的价值

时间:2020-01-31 15:07:04

标签: java http post apache-camel microservices

我必须从POST调用的主体中获取属性的值。

我要发布这种类型的JSON:

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

在保存实体之前,我想检查“ key”属性的值是否包含一个字符串,该字符串的值包含char ":"-一种验证。

同时,我想确保“ type”的值是Enumeration列表的一部分-这里也有某种验证。

我尝试使用simple()exchange-和validator()来检查值是否包含:-但没有成功。

如何从POST调用的正文中获取键的值?

1 个答案:

答案 0 :(得分:1)

一种简单的解决方案是先将JSON解组到POJO,然后使用Bean Component(https://camel.apache.org/components/latest/bean-component.html)验证POJO。

示例:

.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;
    }

}

要使其正常工作,您需要添加camel-jackson库(https://mvnrepository.com/artifact/org.apache.camel/camel-jackson)。

您可以在以下位置找到有关JSON解封的信息:https://camel.apache.org/manual/latest/json.html