From 043b760e03056d81d700e67051774dabccfc1c0e Mon Sep 17 00:00:00 2001 From: tanghc Date: Wed, 31 Jul 2019 15:40:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/docs/_sidebar.md | 60 ++++----- doc/docs/files/10087_自定义返回结果.md | 125 ++++++++++++++++++ ..._自定义过滤器.md => 10088_自定义过滤器.md} | 0 doc/docs/files/10099_更改数据节点名称.md | 69 ---------- 4 files changed, 155 insertions(+), 99 deletions(-) create mode 100644 doc/docs/files/10087_自定义返回结果.md rename doc/docs/files/{10102_自定义过滤器.md => 10088_自定义过滤器.md} (100%) delete mode 100644 doc/docs/files/10099_更改数据节点名称.md diff --git a/doc/docs/_sidebar.md b/doc/docs/_sidebar.md index 8d4723a5..7f3785ec 100644 --- a/doc/docs/_sidebar.md +++ b/doc/docs/_sidebar.md @@ -1,32 +1,32 @@ -* [首页](/?t=1564370846275) +* [首页](/?t=1564558762831) * 开发文档 - * [快速体验](files/10010_快速体验.md?t=1564370846281) - * [项目接入到SOP](files/10011_项目接入到SOP.md?t=1564370846298) - * [新增接口](files/10020_新增接口.md?t=1564370846298) - * [业务参数校验](files/10030_业务参数校验.md?t=1564370846299) - * [错误处理](files/10040_错误处理.md?t=1564370846299) - * [编写文档](files/10041_编写文档.md?t=1564370846299) - * [接口交互详解](files/10050_接口交互详解.md?t=1564370846299) - * [easyopen支持](files/10070_easyopen支持.md?t=1564370846299) - * [使用签名校验工具](files/10080_使用签名校验工具.md?t=1564370846299) - * [ISV管理](files/10085_ISV管理.md?t=1564370846299) - * [自定义路由](files/10086_自定义路由.md?t=1564370846299) - * [路由授权](files/10090_路由授权.md?t=1564370846300) - * [接口限流](files/10092_接口限流.md?t=1564370846300) - * [监控日志](files/10093_监控日志.md?t=1564370846300) - * [SDK开发](files/10095_SDK开发.md?t=1564370846300) - * [使用SpringCloudGateway](files/10096_使用SpringCloudGateway.md?t=1564370846300) - * [应用授权](files/10097_应用授权.md?t=1564370846300) - * [更改数据节点名称](files/10099_更改数据节点名称.md?t=1564370846300) - * [传统web开发](files/10100_传统web开发.md?t=1564370846300) - * [自定义过滤器](files/10102_自定义过滤器.md?t=1564370846300) - * [文件上传](files/10104_文件上传.md?t=1564370846301) - * [nacos注册中心](files/10106_nacos注册中心.md?t=1564370846301) - * [扩展其它注册中心](files/10107_扩展其它注册中心.md?t=1564370846301) - * [配置Sleuth链路追踪](files/10109_配置Sleuth链路追踪.md?t=1564370846301) + * [快速体验](files/10010_快速体验.md?t=1564558762834) + * [项目接入到SOP](files/10011_项目接入到SOP.md?t=1564558762850) + * [新增接口](files/10020_新增接口.md?t=1564558762850) + * [业务参数校验](files/10030_业务参数校验.md?t=1564558762850) + * [错误处理](files/10040_错误处理.md?t=1564558762850) + * [编写文档](files/10041_编写文档.md?t=1564558762850) + * [接口交互详解](files/10050_接口交互详解.md?t=1564558762850) + * [easyopen支持](files/10070_easyopen支持.md?t=1564558762850) + * [使用签名校验工具](files/10080_使用签名校验工具.md?t=1564558762850) + * [ISV管理](files/10085_ISV管理.md?t=1564558762850) + * [自定义路由](files/10086_自定义路由.md?t=1564558762851) + * [自定义返回结果](files/10087_自定义返回结果.md?t=1564558762851) + * [自定义过滤器](files/10088_自定义过滤器.md?t=1564558762851) + * [路由授权](files/10090_路由授权.md?t=1564558762851) + * [接口限流](files/10092_接口限流.md?t=1564558762851) + * [监控日志](files/10093_监控日志.md?t=1564558762851) + * [SDK开发](files/10095_SDK开发.md?t=1564558762851) + * [使用SpringCloudGateway](files/10096_使用SpringCloudGateway.md?t=1564558762851) + * [应用授权](files/10097_应用授权.md?t=1564558762851) + * [传统web开发](files/10100_传统web开发.md?t=1564558762851) + * [文件上传](files/10104_文件上传.md?t=1564558762852) + * [nacos注册中心](files/10106_nacos注册中心.md?t=1564558762852) + * [扩展其它注册中心](files/10107_扩展其它注册中心.md?t=1564558762852) + * [配置Sleuth链路追踪](files/10109_配置Sleuth链路追踪.md?t=1564558762852) * 原理分析 - * [原理分析之@ApiMapping](files/90010_原理分析之@ApiMapping.md?t=1564370846301) - * [原理分析之路由存储](files/90011_原理分析之路由存储.md?t=1564370846301) - * [原理分析之如何路由](files/90012_原理分析之如何路由.md?t=1564370846301) - * [原理分析之文档归纳](files/90013_原理分析之文档归纳.md?t=1564370846301) - * [常见问题](files/90100_常见问题.md?t=1564370846301) + * [原理分析之@ApiMapping](files/90010_原理分析之@ApiMapping.md?t=1564558762852) + * [原理分析之路由存储](files/90011_原理分析之路由存储.md?t=1564558762852) + * [原理分析之如何路由](files/90012_原理分析之如何路由.md?t=1564558762852) + * [原理分析之文档归纳](files/90013_原理分析之文档归纳.md?t=1564558762852) + * [常见问题](files/90100_常见问题.md?t=1564558762852) diff --git a/doc/docs/files/10087_自定义返回结果.md b/doc/docs/files/10087_自定义返回结果.md new file mode 100644 index 00000000..352f7ccf --- /dev/null +++ b/doc/docs/files/10087_自定义返回结果.md @@ -0,0 +1,125 @@ +# 自定义返回结果 + +网关默认对业务结果进行合并,然后返回统一的格式。 + +针对`alipay.story.find`接口,微服务端返回结果如下: + +```json +{ + "name": "白雪公主", + "id": 1, + "gmtCreate": 1554193987378 +} +``` + +网关合并后,最终结果如下 + +```json +{ + "alipay_story_find_response": { + "msg": "Success", + "code": "10000", + "name": "白雪公主", + "id": 1, + "gmtCreate": 1554193987378 + }, + "sign": "xxxxx" +} +``` + +其中`alipay_story_find_response`是它的数据节点。规则是: + +> 将接口名中的点`.`转换成下划线`_`,后面加上`_response` + +代码实现如下: + +```java +String method = "alipay.story.find"; +return method.replace('.', '_') + "_response"; +``` + +详见`DefaultDataNameBuilder.java` + +如果要更改数据节点,比如`result`,可使用`CustomDataNameBuilder.java`。 + +```java +@Configuration +public class ZuulConfig extends AlipayZuulConfiguration { + + static { + ... + ApiConfig.getInstance().setDataNameBuilder(new CustomDataNameBuilder()); + ... + } + +} +``` + +设置后,网关统一的返回结果如下: + +```json +{ + "result": { + ... + }, + "sign": "xxxxx" +} +``` + +此外,构造方法可指定自定义字段名称:`new CustomDataNameBuilder("data");`。 +设置后,数据节点将变成`data` + +```json +{ + "data": { + ... + }, + "sign": "xxxxx" +} +``` + +**注**:网关设置了CustomDataNameBuilder后,SDK也要做相应的更改:`SdkConfig.dataNameBuilder = new CustomDataNameBuilder();` + +## 自定义结果处理 + +如果想要对微服务结果做更深一步处理,步骤如下: + +1. 新增一个类,继承`ZuulResultExecutor.java`,并重写`public String merge(T exchange, JSONObject responseData)`方法 + +方法merge参数说明如下: + + exchange:RequestContext对象 + responseData:微服务端返回的结果 + +方法返回最终结果 + +2. 配置自定义类 + +```java +public class SopGatewayApplication { + + public static void main(String[] args) { + ApiConfig.getInstance().setZuulResultExecutor(new MyzuulResultExecutor()); + SpringApplication.run(SopGatewayApplication.class, args); + } + +} +``` + + +## 不合并结果 + +如果不希望对结果进行合并,可设置`ApiConfig.getInstance().setMergeResult(false);` + +```java +public class SopGatewayApplication { + + public static void main(String[] args) { + ApiConfig.getInstance().setMergeResult(false); + SpringApplication.run(SopGatewayApplication.class, args); + } + +} +``` + +这样,网关最终返回结果即为微服务端的返回结果。 \ No newline at end of file diff --git a/doc/docs/files/10102_自定义过滤器.md b/doc/docs/files/10088_自定义过滤器.md similarity index 100% rename from doc/docs/files/10102_自定义过滤器.md rename to doc/docs/files/10088_自定义过滤器.md diff --git a/doc/docs/files/10099_更改数据节点名称.md b/doc/docs/files/10099_更改数据节点名称.md deleted file mode 100644 index 75e278c2..00000000 --- a/doc/docs/files/10099_更改数据节点名称.md +++ /dev/null @@ -1,69 +0,0 @@ -# 更改数据节点名称 - -针对`alipay.story.find`接口,它的返回结果如下: - -```json -{ - "alipay_story_find_response": { - "msg": "Success", - "code": "10000", - "name": "白雪公主", - "id": 1, - "gmtCreate": 1554193987378 - }, - "sign": "xxxxx" -} -``` - -其中`alipay_story_find_response`是它的数据节点。规则是: - -> 将接口名中的点`.`转换成下划线`_`,后面加上`_response` - -代码实现如下: - -```java -String method = "alipay.story.find"; -return method.replace('.', '_') + "_response"; -``` - -详见`DefaultDataNameBuilder.java` - -如果要更改数据节点,比如`result`,可使用`CustomDataNameBuilder.java`。 - -```java -@Configuration -public class ZuulConfig extends AlipayZuulConfiguration { - - static { - ... - ApiConfig.getInstance().setDataNameBuilder(new CustomDataNameBuilder()); - ... - } - -} -``` - -设置后,网关统一的返回结果如下: - -```json -{ - "result": { - ... - }, - "sign": "xxxxx" -} -``` - -此外,构造方法可指定自定义字段名称:`new CustomDataNameBuilder("data");`。 -设置后,数据节点将变成`data` - -```json -{ - "data": { - ... - }, - "sign": "xxxxx" -} -``` - -**注**:网关设置了CustomDataNameBuilder后,SDK也要做相应的更改:`SdkConfig.dataNameBuilder = new CustomDataNameBuilder();`