在 name/description 中创建具有特殊字符的组时获得 400 和 "Invalid Input: groupDescription"
Getting a 400 and "Invalid Input: groupDescription" when creating a group with special characters in the name/description
我已经尝试使用 java 客户端版本 directory_v1-rev20201215-1.31.0
以及直接 REST 调用,但我仍然收到 400 错误。我没有尝试过特殊字符的完整排列,但我确信等号在组的名称或描述中会失败。我需要做一个简单的 escaping/encoding,但我确实没有找到提到它的文档部分!
我也知道使用 Google UI 创建组是可行的,所以 IT 允许特殊字符通过是正确的做法。
这里有一些精简的代码,希望对您有所帮助:
public Group createGroup() {
Directory directoryService = null;
try {
final NetHttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
final JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
GoogleCredentials credentials;
try (FileInputStream serviceAccountStream = new FileInputStream(CREDENTIALS_FILE_PATH)) {
ServiceAccountCredentials saCredentials = ServiceAccountCredentials.fromStream(serviceAccountStream);
credentials = saCredentials.createDelegated(IMPERSONATION_ACCOUNT).createScoped(DirectoryScopes.ADMIN_DIRECTORY_GROUP);
}
directoryService = new Directory.Builder(httpTransport, jsonFactory, new HttpCredentialsAdapter(credentials))
.build();
} catch (GeneralSecurityException | IOException e) {
log.error("Unable to initialize service", e);
}
Group group = null;
try {
String groupText = "ASDF = QWERTY";
String email = "foo@bar.com";
Group newGroup = new Group();
newGroup.setName(groupText);
newGroup.setDescription(groupText);
newGroup.setEmail(email);
group = directoryService.groups().insert(newGroup).execute();
} catch (IOException e) {
log.error("uh oh", e);
}
return group;
}
我也尝试过各种其他转义和编码机制,但返回组时所有内容仍保持编码状态。所以,显然我还没有找到合适的。任何 thoughts/tips?
更新 1:
作为对下面@ron-m 的回应,我可以通过管理界面创建一个包含这些特殊字符的组:
{
"kind": "admin#directory#group",
"id": "01fob9te1iak5t4",
"etag": "\"TMv00O2ISW7vEPqlqGLVmYmFaDFMCNc2QQc0SLgd5dQ/i_JUX6L9OJm-W4jcyL1hB1TApGg\"",
"email": "__-cwm--test--group--characters-iu-group@XXXXXXXXX",
"name": "__ CWM < test = group > characters",
"directMembersCount": "1",
"description": "__ CWM < test = group > characters, but in the description",
"adminCreated": false
}
克里斯
- 向 Google Workspace 或其他 Google 云帐户添加群组名称和群组描述时,请遵循以下准则
群组名称和描述
- 名称最长可达 73 个字符。
- 使用易于识别组目的的名称。
- 对于在管理控制台中创建的群组,名称和说明不能包含等号 (=) 或 方括号(<、>).
使用 groups.insert().
创建组时,此准则似乎也适用
我能够使用上述无效字符 (<,>,=) 以外的特殊字符创建群组。
示例响应正文:
{
"kind": "admin#directory#group",
"id": "sample id",
"etag": "sample tag"",
"email": "sample@example.com",
"name": "ASDF, QWERTY",
"description": "",
"adminCreated": true
}
管理控制台:
我已经尝试使用 java 客户端版本 directory_v1-rev20201215-1.31.0
以及直接 REST 调用,但我仍然收到 400 错误。我没有尝试过特殊字符的完整排列,但我确信等号在组的名称或描述中会失败。我需要做一个简单的 escaping/encoding,但我确实没有找到提到它的文档部分!
我也知道使用 Google UI 创建组是可行的,所以 IT 允许特殊字符通过是正确的做法。
这里有一些精简的代码,希望对您有所帮助:
public Group createGroup() {
Directory directoryService = null;
try {
final NetHttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
final JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
GoogleCredentials credentials;
try (FileInputStream serviceAccountStream = new FileInputStream(CREDENTIALS_FILE_PATH)) {
ServiceAccountCredentials saCredentials = ServiceAccountCredentials.fromStream(serviceAccountStream);
credentials = saCredentials.createDelegated(IMPERSONATION_ACCOUNT).createScoped(DirectoryScopes.ADMIN_DIRECTORY_GROUP);
}
directoryService = new Directory.Builder(httpTransport, jsonFactory, new HttpCredentialsAdapter(credentials))
.build();
} catch (GeneralSecurityException | IOException e) {
log.error("Unable to initialize service", e);
}
Group group = null;
try {
String groupText = "ASDF = QWERTY";
String email = "foo@bar.com";
Group newGroup = new Group();
newGroup.setName(groupText);
newGroup.setDescription(groupText);
newGroup.setEmail(email);
group = directoryService.groups().insert(newGroup).execute();
} catch (IOException e) {
log.error("uh oh", e);
}
return group;
}
我也尝试过各种其他转义和编码机制,但返回组时所有内容仍保持编码状态。所以,显然我还没有找到合适的。任何 thoughts/tips?
更新 1: 作为对下面@ron-m 的回应,我可以通过管理界面创建一个包含这些特殊字符的组:
{
"kind": "admin#directory#group",
"id": "01fob9te1iak5t4",
"etag": "\"TMv00O2ISW7vEPqlqGLVmYmFaDFMCNc2QQc0SLgd5dQ/i_JUX6L9OJm-W4jcyL1hB1TApGg\"",
"email": "__-cwm--test--group--characters-iu-group@XXXXXXXXX",
"name": "__ CWM < test = group > characters",
"directMembersCount": "1",
"description": "__ CWM < test = group > characters, but in the description",
"adminCreated": false
}
克里斯
- 向 Google Workspace 或其他 Google 云帐户添加群组名称和群组描述时,请遵循以下准则
群组名称和描述
- 名称最长可达 73 个字符。
- 使用易于识别组目的的名称。
- 对于在管理控制台中创建的群组,名称和说明不能包含等号 (=) 或 方括号(<、>).
使用 groups.insert().
创建组时,此准则似乎也适用我能够使用上述无效字符 (<,>,=) 以外的特殊字符创建群组。
示例响应正文:
{
"kind": "admin#directory#group",
"id": "sample id",
"etag": "sample tag"",
"email": "sample@example.com",
"name": "ASDF, QWERTY",
"description": "",
"adminCreated": true
}
管理控制台: