繁体   English   中英

ESB WSO2 Java - 我想使用 Class Mediator 修改 json 文件中的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM