You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
SOP/doc/docs/files/10087_自定义返回结果.md

2.1 KiB

自定义返回结果

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

针对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

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