首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用JsonBuilder的toPrettyString时的StackOverflowError

使用JsonBuilder的toPrettyString时的StackOverflowError
EN

Stack Overflow用户
提问于 2019-07-02 20:04:38
回答 1查看 880关注 0票数 1

我有以下代码。它接收Jenkins工作区中本地可用的文件名,读取文件,并尝试将其内容发送到端点。

对于service-configuration.json,这是可行的。然而,对于剩余的文件,它会失败,并显示一个StackOverflowError...

代码语言:javascript
复制
// Update Service configuration.
serviceJson = readJSON file: "service-configuration.json"

response = httpRequest validResponseCodes: "100:504", acceptType: "APPLICATION_JSON", contentType: "APPLICATION_JSON", customHeaders: [[name: 'Authorization', value: iamToken]], httpMode: "PUT", requestBody: new JsonBuilder(serviceJson).toPrettyString(), url: GlobalCatalog.service
if (response.status != 200) {
  println "Failure: ${response.status} ${response.content}"
  currentBuild.result = 'FAILURE'
  error "Failed uploading Global Catalog entry."
}

// Update Plans and their Deployments configurations.
GlobalCatalog.plans.each { plan ->
  planJson = readJSON file: "${plan.planName}-plan-configuration.json"

  response = httpRequest validResponseCodes: "100:504", acceptType: "APPLICATION_JSON", contentType: "APPLICATION_JSON", customHeaders: [[name: 'Authorization', value: iamToken]], httpMode: "PUT", requestBody: new JsonBuilder(planJson).toPrettyString(), url: plan.url
  if (response.status != 200) {
    println "Failure: ${response.status} ${response.content}"
    currentBuild.result = 'FAILURE'
    error "Failed uploading Global Catalog entry."
  } else {
    plan.deployments.each { deployment ->
      deploymentJson = readJSON file: "${plan.planName}-${deployment.region}-deployment-configuration.json"

      response = httpRequest validResponseCodes: "100:504", acceptType: "APPLICATION_JSON", contentType: "APPLICATION_JSON", customHeaders: [[name: 'Authorization', value: iamToken]], httpMode: "PUT", requestBody: new JsonBuilder(deploymentJson).toPrettyString(), url: deployment.url    
      if (response.status != 200) {
        println "Failure: ${response.status} ${response.content}"
        currentBuild.result = 'FAILURE'
        error "Failed uploading Global Catalog entry."
      }
    }
  }
}

StackOverflowError:

代码语言:javascript
复制
java.lang.StackOverflowError
    at groovy.json.JsonOutput.writeMap(JsonOutput.java:458)
    at groovy.json.JsonOutput.writeObject(JsonOutput.java:321)
    at groovy.json.JsonOutput.writeMap(JsonOutput.java:458)
    at groovy.json.JsonOutput.writeObject(JsonOutput.java:321)
    at groovy.json.JsonOutput.writeMap(JsonOutput.java:458)
    at groovy.json.JsonOutput.writeObject(JsonOutput.java:321)
    at groovy.json.JsonOutput.writeMap(JsonOutput.java:458)
    at groovy.json.JsonOutput.writeObject(JsonOutput.java:321)
    at groovy.json.JsonOutput.writeMap(JsonOutput.java:458)
    at groovy.json.JsonOutput.writeObject(JsonOutput.java:321)
    at groovy.json.JsonOutput.writeMap(JsonOutput.java:458)
    at groovy.json.JsonOutput.writeObject(JsonOutput.java:321)
    at groovy.json.JsonOutput.writeMap(JsonOutput.java:458)
    at groovy.json.JsonOutput.writeObject(JsonOutput.java:321)
    at groovy.json.JsonOutput.writeMap(JsonOutput.java:458)
    at groovy.json.JsonOutput.writeObject(JsonOutput.java:321)
    at groovy.json.JsonOutput.writeMap(JsonOutput.java:458)
    at groovy.json.JsonOutput.writeObject(JsonOutput.java:321)
    at groovy.json.JsonOutput.writeMap(JsonOutput.java:458)

编辑:如果我使用toString(),它可以工作--但是文件中各种语言字符串的编码不会被保留……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-04 15:14:27

正如评论中所建议的那样,使用JsonOutput.prettyPrint(myProp)比使用new JsonBuilder(myProp).toPrettyString()要好得多,尽管我不确定为什么……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56852072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档