我必须从POST调用的主体中获取属性的值。
我要发布这种类型的JSON:
{"key" : ["test:testValue"
"keyTest:value"],
"address": "testAddress",
"type" : "street"}
在保存实体之前,我想检查“ key”属性的值是否包含一个字符串,该字符串的值包含char ":"
-一种验证。
同时,我想确保“ type”的值是Enumeration列表的一部分-这里也有某种验证。
我尝试使用simple()
或exchange
-和validator()
来检查值是否包含:
-但没有成功。
如何从POST调用的正文中获取键的值?
答案 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。