in community/document-readers/spring-ai-alibaba-starter-document-reader-notion/src/main/java/com/alibaba/cloud/ai/reader/notion/NotionResource.java [122:192]
private String getPageContent(String notionToken, String pageId) {
try {
// 1. Get page content
URI pageUri = URI.create(BASE_URL + "/pages/" + pageId);
HttpRequest pageRequest = HttpRequest.newBuilder()
.header("Authorization", "Bearer " + notionToken)
.header("Notion-Version", API_VERSION)
.uri(pageUri)
.GET()
.build();
HttpResponse<String> pageResponse = this.httpClient.send(pageRequest, HttpResponse.BodyHandlers.ofString());
Assert.isTrue(pageResponse.statusCode() == 200, "Failed to fetch page content");
// 2. Parse page content
ObjectMapper objectMapper = new ObjectMapper();
JsonNode pageJson = objectMapper.readTree(pageResponse.body());
StringBuilder content = new StringBuilder();
// Extract page title
JsonNode properties = pageJson.get("properties");
if (properties != null && properties.has("title")) {
JsonNode titleProp = properties.get("title");
JsonNode titleArray = titleProp.get("title");
if (titleArray != null && titleArray.isArray()) {
for (JsonNode titleNode : titleArray) {
content.append(titleNode.get("plain_text").asText());
}
content.append("\n\n");
}
}
// 3. Get page blocks
URI blocksUri = URI.create(BASE_URL + "/blocks/" + pageId + "/children");
HttpRequest blocksRequest = HttpRequest.newBuilder()
.header("Authorization", "Bearer " + notionToken)
.header("Notion-Version", API_VERSION)
.uri(blocksUri)
.GET()
.build();
HttpResponse<String> blocksResponse = this.httpClient.send(blocksRequest,
HttpResponse.BodyHandlers.ofString());
Assert.isTrue(blocksResponse.statusCode() == 200, "Failed to fetch page blocks");
// 4. Parse block content
JsonNode blocksJson = objectMapper.readTree(blocksResponse.body());
JsonNode blocks = blocksJson.get("results");
// 5. Extract text content
if (blocks != null && blocks.isArray()) {
for (JsonNode block : blocks) {
String type = block.get("type").asText();
if (block.has(type)) {
JsonNode typeObj = block.get(type);
if (typeObj.has("rich_text")) {
JsonNode richText = typeObj.get("rich_text");
for (JsonNode textNode : richText) {
content.append(textNode.get("plain_text").asText());
}
content.append("\n");
}
}
}
}
return content.toString();
}
catch (Exception e) {
throw new RuntimeException("Failed to get page content", e);
}
}