google-api-ruby-client:请求序列化导致空请求
google-api-ruby-client: Request serialization results in empty requests
replacement_requests = [
Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: "{{name}}", replace_text: "Joe"),
Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: "{{age}}", replace_text: "34"),
Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: "{{address}}", replace_text: "Westwood"),
]
batch_request = Google::Apis::DocsV1::BatchUpdateDocumentRequest.new(requests: replacement_requests)
鉴于上述代码,当我将此 BatcUpdateDocumentRequest 实例传递到我的 service.batch_update_document 函数时,我收到一个 400 错误请求。这似乎与批处理请求的序列化方式有关。
为了说明,如果我们调用 batch_request.to_json
,我们会收到以下信息:
"{\"requests\":[{},{},{}]}"
这告诉我在序列化过程中出了点问题,但是我的代码似乎相当规范。
关于为什么我的请求无法序列化有什么想法吗?
- 您想通过 google-api-client 和 ruby.
使用 replaceAllText 请求
- 您已经能够使用 Google 文档 API.
为 Google 文档添加和获取值
如果我的理解是正确的,这个修改怎么样?在您的脚本中,创建的请求正文是 {"requests":[{},{},{}]}
。由此,错误发生。请修改脚本如下。
修改点:
- 对
Google::Apis::DocsV1::ReplaceAllTextRequest
的 contains_text
使用 Google::Apis::DocsV1::SubstringMatchCriteria
- 对
Google::Apis::DocsV1::ReplaceAllTextRequest
使用 Google::Apis::DocsV1::Request
。
通过以上修改,创建请求体。
修改后的脚本:
text1 = Google::Apis::DocsV1::SubstringMatchCriteria.new(text: "{{name}}")
text2 = Google::Apis::DocsV1::SubstringMatchCriteria.new(text: "{{age}}")
text3 = Google::Apis::DocsV1::SubstringMatchCriteria.new(text: "{{address}}")
req1 = Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: text1 , replace_text: "Joe")
req2 = Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: text2, replace_text: "34")
req3 = Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: text3, replace_text: "Westwood")
replacement_requests = [
Google::Apis::DocsV1::Request.new(replace_all_text: req1),
Google::Apis::DocsV1::Request.new(replace_all_text: req2),
Google::Apis::DocsV1::Request.new(replace_all_text: req3)
]
batch_request = Google::Apis::DocsV1::BatchUpdateDocumentRequest.new(requests: replacement_requests)
# result = service.batch_update_document(document_id, batch_request) # When you request with "batch_request", you can use this.
请求正文:
当上述脚本为运行时,会创建以下请求正文。
{"requests":[
{"replaceAllText":{"containsText":{"text":"{{name}}"},"replaceText":"Joe"}},
{"replaceAllText":{"containsText":{"text":"{{age}}"},"replaceText":"34"}},
{"replaceAllText":{"containsText":{"text":"{{address}}"},"replaceText":"Westwood"}}
]}
注:
- 出现授权相关错误时,请确认授权范围及文档API是否已启用。
参考文献:
如果这不起作用,我深表歉意。
replacement_requests = [
Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: "{{name}}", replace_text: "Joe"),
Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: "{{age}}", replace_text: "34"),
Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: "{{address}}", replace_text: "Westwood"),
]
batch_request = Google::Apis::DocsV1::BatchUpdateDocumentRequest.new(requests: replacement_requests)
鉴于上述代码,当我将此 BatcUpdateDocumentRequest 实例传递到我的 service.batch_update_document 函数时,我收到一个 400 错误请求。这似乎与批处理请求的序列化方式有关。
为了说明,如果我们调用 batch_request.to_json
,我们会收到以下信息:
"{\"requests\":[{},{},{}]}"
这告诉我在序列化过程中出了点问题,但是我的代码似乎相当规范。
关于为什么我的请求无法序列化有什么想法吗?
- 您想通过 google-api-client 和 ruby. 使用 replaceAllText 请求
- 您已经能够使用 Google 文档 API. 为 Google 文档添加和获取值
如果我的理解是正确的,这个修改怎么样?在您的脚本中,创建的请求正文是 {"requests":[{},{},{}]}
。由此,错误发生。请修改脚本如下。
修改点:
- 对
Google::Apis::DocsV1::ReplaceAllTextRequest
的 - 对
Google::Apis::DocsV1::ReplaceAllTextRequest
使用Google::Apis::DocsV1::Request
。
contains_text
使用 Google::Apis::DocsV1::SubstringMatchCriteria
通过以上修改,创建请求体。
修改后的脚本:
text1 = Google::Apis::DocsV1::SubstringMatchCriteria.new(text: "{{name}}")
text2 = Google::Apis::DocsV1::SubstringMatchCriteria.new(text: "{{age}}")
text3 = Google::Apis::DocsV1::SubstringMatchCriteria.new(text: "{{address}}")
req1 = Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: text1 , replace_text: "Joe")
req2 = Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: text2, replace_text: "34")
req3 = Google::Apis::DocsV1::ReplaceAllTextRequest.new(contains_text: text3, replace_text: "Westwood")
replacement_requests = [
Google::Apis::DocsV1::Request.new(replace_all_text: req1),
Google::Apis::DocsV1::Request.new(replace_all_text: req2),
Google::Apis::DocsV1::Request.new(replace_all_text: req3)
]
batch_request = Google::Apis::DocsV1::BatchUpdateDocumentRequest.new(requests: replacement_requests)
# result = service.batch_update_document(document_id, batch_request) # When you request with "batch_request", you can use this.
请求正文:
当上述脚本为运行时,会创建以下请求正文。
{"requests":[
{"replaceAllText":{"containsText":{"text":"{{name}}"},"replaceText":"Joe"}},
{"replaceAllText":{"containsText":{"text":"{{age}}"},"replaceText":"34"}},
{"replaceAllText":{"containsText":{"text":"{{address}}"},"replaceText":"Westwood"}}
]}
注:
- 出现授权相关错误时,请确认授权范围及文档API是否已启用。
参考文献:
如果这不起作用,我深表歉意。