java - 使用 Spring 的 RESTful API 端点
问题描述
在学校我有一个任务,我必须用 Java 编程语言完成以下任务:
实现 RESTful 端点 API,它同时调用以下网站:
- https://pizzerijalimbo.si/meni/
- https://pizzerijalimbo.si/kontakt/
- https://pizzerijalimbo.si/my-account/
- https://pizzerijalimbo.si/o-nas/
端点的输入是“整数”,表示同时调用上述网页的次数(最小 1 表示所有连续调用,最大 4 表示所有同时调用)。
从每个页面中提取一个简短的标题文本,并将该文本保存在一个通用的全局结构(数组,文件夹()所有网页中保存的地址文本。
我遵循了一些 YouTube 教程,只设法将来自随机 API URL 的数据显示到我的本地主机站点。
TestApplication.java
(主文件)
package com.example.test;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class TestApplication {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
APIcontroller.java
(第二个文件)
package com.example.test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.Arrays;
import java.util.List;
@RestController
public class APIcontroller {
@Autowired
private RestTemplate restTemplate;
private static String url = "https://www.result.si/projekti/";
@GetMapping("/countries")
public List<Object> getCountries() {
Object[] countries = restTemplate.getForObject(url, Object[].class);
return Arrays.asList(countries);
}
}
请帮助我提供一些基本的指导或建议。
解决方案
如果我理解正确,您需要有一个带有查询参数的端点,如下所示:
@RestController
public class APIcontroller {
@Autowired
private RestTemplate restTemplate;
List<String> websites = Arrays.asList("https://pizzerijalimbo.si/meni/",
"https://pizzerijalimbo.si/kontakt/",
"https://pizzerijalimbo.si/my-account/",
"https://pizzerijalimbo.si/o-nas/");
@GetMapping("/data-scraping")
public List<Object> getData(@RequestParam(required = true) int numberOfWebsites) {
List<String> websitesToScrape = websites.subList(0, numberOfWebsites);
for (String website : websitesToScrape) {
Document doc = Jsoup.connect(website).get();
// here you need to extract a the title text from each page and store it in a common global variable
}
}
}
更新
也许使用 Jsoup 获取网站内容会更好,这样更容易从中获取您需要的数据。更多详情请访问:
推荐阅读
- node.js - npm、pnpm、yarn 或 pkglink 以节省时间和磁盘空间?
- python - 在 For 循环中,如何解压缩“枚举”和另一个对三个变量的可迭代
- python - 我可以一次从一个文件夹中导入所有 Python 文件吗?
- java - HttpsURLConnection:使用 IDE JDK 可用于身份验证,但不适用于 JRE!这很奇怪
- python - 如何将用户输入与字典索引匹配?
- docker - 未经授权:拉取 sequenceiq/hadoop-docker:2.7.1 时需要身份验证
- machine-learning - 反向传播、交叉熵损失和 Softmax 函数
- sql-server - 在T-SQL(SQL Server)中将工作时间日期时间调整为下一个工作日上午8点
- c++ - Weird "reference to non-static member function must be called" error
- c - CPU 在访问全局变量时重置自定义 C 内核的执行