如何将带有键值的JSON文件转换为apache骆驼头文件-Spring DSL
我有一个带有键值对的JSON文件,我想把键值对放在标题中。 因此,当我有一个包含以下内容的文件时:如何将带有键值的JSON文件转换为apache骆驼头文件-Spring DSL,json,spring-boot,apache-camel,spring-camel,Json,Spring Boot,Apache Camel,Spring Camel,我有一个带有键值对的JSON文件,我想把键值对放在标题中。 因此,当我有一个包含以下内容的文件时: [{"msgId": "8600C5A3-C666-4E63-BFDB-52BCF557F938", "jiraId": "ERR002"}] 我想创建名为msgId、值为“8600C5A3-C666-4E63-BFDB-52BCF557F938”的标题 或者作为一种替代方法:是否有一种方法将exchange的标头存储到一个文件中,以后可以在另一个exchange中将标头还原到该文件中 多谢各位
[{"msgId": "8600C5A3-C666-4E63-BFDB-52BCF557F938", "jiraId": "ERR002"}]
我想创建名为msgId、值为“8600C5A3-C666-4E63-BFDB-52BCF557F938”的标题
或者作为一种替代方法:是否有一种方法将exchange的标头存储到一个文件中,以后可以在另一个exchange中将标头还原到该文件中
多谢各位
编辑:我的示例分支
public void jsonToHeaders(String body, @Headers Map<String, String> headers) throws ParseException {
LOG.info("Starting JSON conversion...");
LOG.debug("Body input, content: {} ", body);
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(body);
if (jsonObject != null)
{
String stringValue = null;
String stringKey = null ;
final String NA_STRING = "*** N/A ***";
for (Object key : jsonObject.keySet()) {
stringKey = ((key == null) ? NA_STRING : (String)key);
stringValue = ((jsonObject.get(stringKey) == null) ? NA_STRING : jsonObject.get(stringKey).toString());
headers.put(stringKey, stringValue);
LOG.debug("Processing key {} with value {}", stringKey, stringValue);
}
LOG.info("Done processed JSON: {}", headers.toString());
}
}
public void jsonToHeaders(字符串体,@Headers映射头)引发异常{
info(“开始JSON转换…”);
debug(“Body输入,内容:{}”,Body);
JSONParser=新的JSONParser();
JSONObject JSONObject=(JSONObject)parser.parse(body);
if(jsonObject!=null)
{
字符串stringValue=null;
字符串stringKey=null;
最终字符串NA_String=“***不适用***”;
for(对象键:jsonObject.keySet()){
stringKey=((key==null)?NA_STRING:(STRING)key);
stringValue=((jsonObject.get(stringKey)==null)?NA_字符串:jsonObject.get(stringKey.toString());
headers.put(stringKey、stringValue);
debug(“处理值为{}的键{}”,stringKey,stringValue);
}
info(“Done processed JSON:{}”,headers.toString());
}
}
您可以在这种情况下使用
海豆
包org.mybean;
导入org.apache.camel.Headers;
导入org.json.simple.JSONObject;
导入org.json.simple.parser.JSONParser;
导入org.json.simple.parser.ParseException;
导入java.io.IOException;
导入java.util.HashMap;
导入java.util.Iterator;
导入java.util.Map;
导入java.util.Set;
公共类JSONToHeadersBean{
public void jsonToHeaders(字符串体,@Headers映射头)引发ParseException{
JSONParser=新的JSONParser();
JSONObject object=(JSONObject)parser.parse(body);
object.keySet().forEach(key->headers.put(key.toString(),object.get(key.toString());
}
//测试
公共静态void main(字符串[]args)引发异常{
字符串正文=“{\“msgId\”:\“8600C5A3-C666-4E63-BFDB-52BCF557F938\”,“jiraId\”:“ERR002\”;
JSONParser=新的JSONParser();
JSONObject object=(JSONObject)parser.parse(body);
最终映射头=新HashMap();
object.keySet().forEach(key->headers.put(key.toString(),object.get(key.toString());
System.out.println();
}
}
创建bean
你们可以在路线上使用它
您也可以将JSON解析为HashMap,并将其放入标题中:
.unmarshal().json(JsonLibrary.Jackson,java.util.Map.class)
.setHeader(“参数”,简单(“主体”))
(需要依赖项)
要访问存储的值,请执行以下操作:
.log(LoggingLevel.INFO,“MsgId:${header.params[MsgId]}”)
我最初是在Spring DSL中寻找答案的,但是,看到这一点非常优雅,并且有空间向bean添加更多解析/转换UTIL,它满足并更喜欢(甚至)解决方案。我确实添加了一些NPE检查,首先是对JSONObject的检查,其次是对键的迭代。在某些情况下,密钥会导致空值,这对我来说是NPE。我的版本添加到了问题的底部,我想用JSON数据替换我的所有标题。但我真的很感激你的表现,谢谢你。