当前位置: 首页 > 文档资料 > SOP 中文文档 >

自定义返回结果

优质
小牛编辑
133浏览
2023-12-01

网关默认对业务结果进行合并,然后返回统一的格式。

针对alipay.story.find接口,微服务端返回结果如下:

{
    "name": "白雪公主",
    "id": 1,
    "gmtCreate": 1554193987378
}

网关合并后,最终结果如下

{
    "alipay_story_find_response": {
        "msg": "Success",
        "code": "10000",
        "name": "白雪公主",
        "id": 1,
        "gmtCreate": 1554193987378
    },
    "sign": "xxxxx"
}

其中alipay_story_find_response是它的数据节点。规则是:

将接口名中的点.转换成下划线_,后面加上_response

代码实现如下:

String method = "alipay.story.find";
return method.replace('.', '_') + "_response";

详见DefaultDataNameBuilder.java

如果要更改数据节点,比如result,可使用CustomDataNameBuilder.java

@Configuration
public class MyConfig {

    static {
        ...
        ApiConfig.getInstance().setDataNameBuilder(new CustomDataNameBuilder());
        ...
    }

}

设置后,网关统一的返回结果如下:

{
    "result": {
        ...
    },
    "sign": "xxxxx"
}

此外,构造方法可指定自定义字段名称:new CustomDataNameBuilder("data");。 设置后,数据节点将变成data

{
    "data": {
        ...
    },
    "sign": "xxxxx"
}

:网关设置了CustomDataNameBuilder后,SDK也要做相应的更改:OpenConfig.dataNameBuilder = new CustomDataNameBuilder();

自定义结果处理

如果想要对微服务结果做更深一步处理,步骤如下:

  1. 新增一个类,继承GatewayResultExecutor.java,并重写String mergeResult(T request, String serviceResult)方法

  2. 配置自定义类

@Configuration
public class MyConfig {

    static {
        ...
        ApiConfig.getInstance().setGatewayResultExecutor(new MyGatewayResultExecutor());
        ...
    }

}

不合并结果

如果不希望对结果进行合并,可在application.properties中设置sop.api-config.merge-result=false

这样,网关最终返回结果即为微服务端的返回结果。