Skip to content

Sheets V4 append with sheet name including "+" broken since google-http-client version 1.34.0 #1573

@mihalyr

Description

@mihalyr

As reported at https://issuetracker.google.com/issues/217399871

The sheets.spreadsheets().values().append operation is failing if the sheet name includes a plus ("+") sign and has a dependency on google-http-client version 1.34.0 or older.

The breaking change is likely the result of #913

Library versions:

 implementation 'com.google.apis:google-api-services-drive:v2-rev212-1.21.0' implementation 'com.google.apis:google-api-services-sheets:v4-rev612-1.25.0' testImplementation 'com.google.api-client:google-api-client:1.25.0' testImplementation 'com.google.http-client:google-http-client:1.34.0' testImplementation 'com.google.http-client:google-http-client-jackson2:1.34.0'

Reproducer:

 @Test void testAppendWithPlusSignSheet() throws Exception { String fileName = "test-append-plus-sign"; String sheetName = "plus+sign"; String spreadsheetId = spreadsheetHelper.createSpreadsheet(fileName, sheetName); String range = sheetName + "!A1"; ValueRange valueRange = new ValueRange(); valueRange.setMajorDimension(SheetOptions.MAJOR_DIMENSION_ROWS); valueRange.setRange(range); valueRange.setValues(ImmutableList.of(ImmutableList.of("test"))); try { Sheets sheets = authHelper.getSheetsService(); sheets.spreadsheets().values() .append(spreadsheetId, range, valueRange) .setValueInputOption(SheetOptions.VALUE_INPUT_RAW) .setInsertDataOption(SheetOptions.INSERT_DATA_ROWS) .setIncludeValuesInResponse(true) .setResponseValueRenderOption(SheetOptions.VALUE_RENDERING_UNFORMATTED) .setResponseDateTimeRenderOption(SheetOptions.DATE_RENDERING_SERIAL) .execute(); } finally { Drive drive = authHelper.getDriveService(); FileList fileList = drive.files().list().execute(); for (File file : fileList.getItems()) { if (file.getTitle().equals(sheetTitle)) { drive.files().delete(file.getId()).execute(); } } } }

This was working fine up to google-http-client version 1.33.0, when used with a newer version it fails with the following exception:

 com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request { "code" : 400, "errors" : [ { "domain" : "global", "message" : "Request range[plus sign!A1] does not match value's range[plus+sign!A1]", "reason" : "badRequest" } ], "message" : "Request range[plus sign!A1] does not match value's range[plus+sign!A1]", "status" : "INVALID_ARGUMENT" } 

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: p3Desirable enhancement or fix. May not be included in next release.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions