我从Google documentation处获取了以下代码。

public static void detectDriveChanges() throws IOException {

    StartPageToken response = DRIVE.changes()
            .getStartPageToken().execute();

    String savedStartPageToken = response.getStartPageToken();
    System.out.println("Start token: " + savedStartPageToken);

    // Begin with our last saved start token for this user or the
    // current token from getStartPageToken()
    String pageToken = savedStartPageToken;
    while (pageToken != null) {
        ChangeList changes = DRIVE.changes().list(pageToken)
                .setFields("*")
                .execute();
        for (Change change : changes.getChanges()) {
            // Process change
            System.out.println("Change found for file: " + change.getFileId());
        }
        if (changes.getNewStartPageToken() != null) {
            // Last page, save this token for the next polling interval
            savedStartPageToken = changes.getNewStartPageToken();


        }
        pageToken = changes.getNextPageToken();
    }
}


.setFields(“ *”)导致以下错误请求响应。

Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
{
  "code" : 400,
  "errors" : [ {
    "domain" : "global",
    "message" : "Bad Request",
    "reason" : "badRequest"
  } ],
  "message" : "Bad Request"


如果我将setfields中的*更改为text,则参数无效。如果完全将其删除,则不会出现任何错误。在这种情况下,我用谷歌搜索来确定setFields的可能参数是什么,但是我什么也没发现。

在此实例中,我在哪里可以找到setFields的可能参数列表?

为什么在setFields设置为*时以上代码失败

我正在使用以下依赖项

<dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-drive</artifactId>
    <version>v3-rev40-1.22.0</version>
</dependency>


问候
康泰

最佳答案

Drive API的setField用于部分响应,这取决于您希望哪些数据将成为返回对象的一部分。

在其上设置“ *”将不起作用,因为它不表示Response对象中的任何字段。为了使它起作用,您要么不设置字段以获取所有值,要么指定仅必要的字段(取决于您所调用的API,对于changeList,它可以是changesnextPageToken,,newStartPageToken

07-28 02:32