更新智能表中的单元格(java)

时间:2014-11-25 10:54:34

标签: java cells smartsheet-api smartsheet-api-1.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单元添加到指定行的Java代码。

它返回错误: -

“无法解析请求。发生以下错误:请求正文必须是JSON对象或JSON数组。 java.io.IOException:服务器返回HTTP响应代码:400为URL:https://api.smartsheet.com/1.1/row/row_id/cells

row_id具有Long值。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分: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"}]}