[英]ESB WSO2 Java - I want to modify a value from a json file with Class Mediator
所以我的 API 有这个 Class Mediator:
public class CheckUser extends AbstractMediator {
public boolean mediate(MessageContext context) {
String age_value = (String) context.getProperty("age_value");
context.setProperty("age_value", 33);
log.info("#### The new age value is: " + context.getProperty("age_value"));
return true;
}
}
我想修改响应中的年龄值
初始 json 文件:
{
"data": {
"user": {
"name": "Andrei",
"adress": "Tudor Vladimirescu, nr2",
"cnp": 123456789,
"age": 22,
"valid": "Yes"
}
}
}
所需的 json 文件:
{
"data": {
"user": {
"name": "Andrei",
"adress": "Tudor Vladimirescu, nr2",
"cnp": 123456789,
"age": 33,
"valid": "Yes"
}
}
}
谢谢!
使用ScriptMediator
做到这一点要容易得多。它是一个非常有用的中介,允许您使用一种编程语言。 您的示例如下所示。 我在这里使用nashornJs
因为数字格式没有问题(年龄仍然是 integer 而不是小数)。
<script language="nashornJs"><![CDATA[
var log = mc.getServiceLog();
var age_value = mc.getProperty('age_value');
var msg = mc.getPayloadJSON();
msg.data.user.age = parseInt(age_value);
mc.setPayloadJSON(message);
log.info("#### The new age value is: " + mc.getProperty('age_value'));]]>
</script>
如果您仍然不相信并想使用Class Mediator
,则必须使用适当的 json 转换库。
您可以使用现有的调解器来实现您的要求(丰富、有效负载工厂等)。 但是如果你真的想使用 class 中介,你可以像下面那样做。
public boolean mediate(MessageContext messageContext) {
org.apache.axis2.context.MessageContext axis2MessageContext = ((Axis2MessageContext) messageContext).getAxis2MessageContext();
JSONObject jsonPayload = new JSONObject(JsonUtil.jsonPayloadToString(axis2MessageContext));
JSONObject data = jsonPayload.getJSONObject("data").getJSONObject("user");
data.remove("age");
data.put("age",33);
jsonPayload.getJSONObject("data").put("user",data);
try {
JsonUtil.getNewJsonPayload(axis2MessageContext,jsonPayload.toString(),true,true);
} catch (AxisFault axisFault) {
axisFault.printStackTrace();
}
return true;
}
在这里,我使用了额外的依赖来构造 JSON 对象。
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.