ESB WSO2 Java-我想用类中介修改json文件中的一个值



所以我为我的API提供了这个类中介:

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,因为数字格式没有问题(年龄仍然是整数而不是小数(。

<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转换库。

您可以使用现有的中介来实现您的需求(富集、有效负载工厂等(。但是,如果您真的想使用类中介,您可以执行以下操作。

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>

相关内容

最新更新