【问题标题】:Post request to airtable in Java在 Java 中向 airtable 发布请求
【发布时间】:2021-10-12 11:57:20
【问题描述】:

我正在尝试在 Java 中复制这个 Curl 命令

curl -X POST \
  https://api.airtable.com/v0/YOUR_BASE_ID/YOUR_TABLE_NAME \
  -H 'Content-Type: application/json' \
  -d '{
    "fields": {
        "Linked Field": ["Record1"]
    },
    "typecast": true 
}'

但我不断收到以下错误:

{"type":"INVALID_REQUEST_BODY","message":"Could not parse request body"}

这是我的代码:

 String jsonRequest = "{" + 
        "fields" + ":" + "{" +
          "Shopping" + ":" + "record_id" +
          "Update" + ":" + "Apple" +
        "},"+
    
          "typecast" + ":" + "true" + 
    "}";

  public void createNewRecord() throws UnirestException{
        HttpResponse<JsonNode> response = Unirest.post("https://api.airtable.com/v0/"+environments.MAIN_BASE_API_KEY+"/"+ environments.TABLE_NAME)
      .header("Content-Type", "application/json")
      .header("Authorization", "Bearer " + environments.AIRTABLE_API_KEY)
      .body(jsonRequest)
      .asJson();
      System.out.println(response.getBody().toString());
    }

我不明白我做错了什么。任何帮助将不胜感激。

【问题讨论】:

    标签: java post airtable


    【解决方案1】:

    您的 jsonRequest 看起来不像是有效的 JSON。我假设这也是 airtable API 试图用Could not parse request body 告诉你的。如果您输出或检查(使用调试器)jsonRequest 变量(格式化)的内容:

    {
        fields: {
            Shopping:record_id
            Update:Apple
        },
        typecast: true
    }
    

    您至少在fields.shoppingfields.update 之间缺少一个逗号。属性名称也应该用引号引起来。它应该看起来像这样:

    {
        "fields": {
            "Shopping": "record_id",
            "Update": "Apple"
        },
        "typecast": true
    }
    

    您可以使用 JSONLint 之类的东西来帮助您验证 JSON。但更有帮助的不是通过连接字符串来手动编写 JSON,而是使用序列化为 JSON 的 Java 对象。

    推荐阅读:Intro to the Jackson ObjectMapper

    【讨论】:

      猜你喜欢
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多