SAP UI5 batch 请求的响应解析流程分析

举报
汪子熙 发表于 2022/10/03 10:26:46 2022/10/03
【摘要】 batch 请求的回复:使用合适的 handler 解析:该 handler accept 字段:multipart/mixed首先根据响应字段,获取 content-type:content-type 字段,通过;分隔:media type:multipart/mixed返回一个 JSON 对象,包含 mediaType 和 boundary 属性:batch 请求的处理器是 batchP...

batch 请求的回复:

使用合适的 handler 解析:

该 handler accept 字段:multipart/mixed

首先根据响应字段,获取 content-type:

content-type 字段,通过;分隔:

media type:multipart/mixed

返回一个 JSON 对象,包含 mediaType 和 boundary 属性:

batch 请求的处理器是 batchParser:

执行下一行 readBatch 方法:

boundary 的一个例子:batchresponse_16aba97e-4311-41a4-8c64-302727d1d02e
readBatch 的具体处理逻辑还是,基于字符串匹配,即使用 indexOf 查找 boundary 字符串:

readline 的实现就是读取单行:

batch 第一个 part 的头部字段被读取了出来:

media type 必须和硬编码的值一致:application/http

batch 包含的第一个请求 count 的数据已经读取成功了:

已经读取成功了,还要 dispatch:

count 的 media-type 是 text/plain:

return false 了,response 的 body 有值,data 为 undefined:

有4个可用的 handler:

text/plain 负责读取 response.body.

textParser 的逻辑最简单,直接返回 body 字段给 response.data:

读取第二个 part:

这个 part 的 content-type 为 json,因此使用 json handler:

if (handlerAccepts(handler, cType)) {
            var readContext = createReadWriteContext(cType, version, context, handler);
            readContext.response = response;
            response.data = parseCallback(handler, body, readContext);
            return response.data !== undefined;
        }

上述代码的语义是,只有当一个 handler 通过了函数 handlerAccepts 的过滤之后,才能调用 parseCallback,将解析的结果,传递给 response.data.

json handler 使用 JSON.parse 原生 API 进行 json 数据的序列化操作。

序列化成功的 json 数据:

最后返回的 response 是一个数组:

调用最外层的 success handler:

batch 请求的回调函数,在函数 _submitBatchRequest 内部:

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。