1
>Cell newCell = new Cell();
>newCell.setValue("no way");
>newCell.setColumnId(4303755236665220l);
>       
> connection = (HttpURLConnection) new >URL("https://api.smartsheet.com/1.1/row/{row_id}/cells").openConnection();
>connection.setRequestMethod("PUT");
>connection.addRequestProperty("Authorization", "Bearer " + accessToken);
>connection.addRequestProperty("Content-Type", "application/json");
>connection.setDoOutput(true);
>           
>            
>mapper.writeValue(connection.getOutputStream(), newCell);
>mapper.readValue(connection.getInputStream(), new TypeReference<Result<Cell>>() {});
>               
>System.out.println("cell added.");

これは、指定された行にセルを追加するための私の Java コードです。

エラーを返します:-

「要求を解析できません。次のエラーが発生しました: 要求本文は JSON オブジェクトまたは JSON 配列である必要があります。java.io.IOException: サーバーが HTTP 応答コードを返しました: URL の 400: https://api.smartsheet.com/1.1 /row/row_id/cells "

row_id には Long 値があります。

誰でも助けることができますか?

4

1 に答える 1

2

Update Row Cellsエンドポイントを使用してセルに値を追加しているようです。このエンドポイントを使用する場合、Smartsheet API は、リクエスト ボディが単なる単一のセル オブジェクトではなく、セルの配列であることを想定しています。

あなたの場合、リクエストの本文は次のようになります。

{"columnId": 4303755236665220l, "value": "no way"}

そのオブジェクトを次のように配列にラップする場合:

[{"columnId": 4303755236665220l, "value": "no way"} ]

Smartsheet Java SDKを使用することもできます。SDK を使用すると、次の呼び出しを行うだけで済みます。

 List<Cell> cells = new Cell.UpdateRowCellsBuilder().addCell(4303755236665220l, "no way").build();
 smartsheet.rows().updateCells({row_Id}, cells);

ちなみに、このエンドポイントは最近廃止されたため、Modify Rowエンドポイントを使用することをお勧めします。PUT /sheet/{sheetId}/row/{rowId}

このエンドポイントでは、セルの配列が次のように行オブジェクトにラップされるため、リクエストの本文はわずかに変更されるだけです。

{"cells":[{"columnId": 4303755236665220l, "value": "no way"}]}
于 2014-11-25T20:38:33.790 に答える