首页 > 解决方案 > Java Servlet 中的 Google Docs API V1 访问文档

问题描述

我正在尝试使用 Google api 客户端库提供的 AbstractAuthorizationCodeServlet 访问 Java Servlet 中的 Google Docs API V1 文档,但代码给出错误,它无法构建 Doc Builder 的对象。我有 auth 2 creatential 并且从谷歌开发者控制台启用了谷歌文档 API。下面是我的代码。

@WebServlet("/GetGoogleDoc")
public class GetGoogleDoc extends AbstractAuthorizationCodeServlet  {
    private static final long serialVersionUID = 1L;

  private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
  private static final List<String> SCOPES = Collections.singletonList(DocsScopes.DOCUMENTS_READONLY);
  private static final String DOCUMENT_ID = "";

  private static final String  CLIENT_ID="";
  private static final String  CLIENT_SECRET="";

  public GetGoogleDoc() {
    super();
    // TODO Auto-generated constructor stub
}


@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException {
     final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

     Docs service = new Docs.Builder(HTTP_TRANSPORT, JSON_FACTORY, initializeFlow())                 
             .build();
}

@Override
protected String getRedirectUri(HttpServletRequest req) throws ServletException, IOException {
  GenericUrl url = new GenericUrl(req.getRequestURL().toString());
  url.setRawPath("/oauth2callback");
  return url.build();
}

@Override
protected AuthorizationCodeFlow initializeFlow() throws IOException {   


    return new GoogleAuthorizationCodeFlow.Builder(
            new NetHttpTransport(),  JSON_FACTORY, CLIENT_ID,CLIENT_SECRET,SCOPES).build();

}


@Override
protected String getUserId(HttpServletRequest req) throws ServletException, IOException {
    return null;
  // return user ID
}


  static void replaceNamedRange(Docs service, String documentId, String rangeName, String newText)
      throws IOException {
      Document document = service.documents().get(documentId).execute();


    NamedRanges namedRangeList = document.getNamedRanges().get(rangeName);
    if (namedRangeList == null) {
      throw new IllegalArgumentException("The named range is no longer present in the document.");
    }

    List<Range> allRanges = new ArrayList<>();
    Set<Integer> insertIndexes = new HashSet<>();
    for (NamedRange namedRange : namedRangeList.getNamedRanges()) {
      allRanges.addAll(namedRange.getRanges());
      insertIndexes.add(namedRange.getRanges().get(0).getStartIndex());
    }

    // Sort the list of ranges by startIndex, in descending order.
    allRanges.sort(Comparator.comparing(Range::getStartIndex).reversed());

    // Create a sequence of requests for each range.
    List<Request> requests = new ArrayList<>();
    for (Range range : allRanges) {
      // Delete all the content in the existing range.
      requests.add(
          new Request().setDeleteContentRange(new DeleteContentRangeRequest().setRange(range)));

      if (insertIndexes.contains(range.getStartIndex())) {
        // Insert the replacement text.
        requests.add(
            new Request()
                .setInsertText(
                    new InsertTextRequest()
                        .setLocation(
                            new Location()
                                .setSegmentId(range.getSegmentId())
                                .setIndex(range.getStartIndex()))
                        .setText(newText)));

        // Re-create the named range on the new text.
        requests.add(
            new Request()
                .setCreateNamedRange(
                    new CreateNamedRangeRequest()
                        .setName(rangeName)
                        .setRange(
                            new Range()
                                .setSegmentId(range.getSegmentId())
                                .setStartIndex(range.getStartIndex())
                                .setEndIndex(range.getStartIndex() + newText.length()))));
      }
    }


    BatchUpdateDocumentRequest batchUpdateRequest =
        new BatchUpdateDocumentRequest()
            .setRequests(requests)
            .setWriteControl(new WriteControl().setRequiredRevisionId(document.getRevisionId()));
    service.documents().batchUpdate(documentId, batchUpdateRequest).execute();
  }

}

标签: javagoogle-api-clientgoogle-docs-apiservlet-3.0

解决方案


推荐阅读