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是否已启用。

参考文献:

如果这不起作用,我深表歉意。