首页 > 解决方案 > 使用 Spring 的 RESTful API 端点

问题描述

在学校我有一个任务,我必须用 Java 编程语言完成以下任务:

实现 RESTful 端点 API,它同时调用以下网站:

端点的输入是“整数”,表示同时调用上述网页的次数(最小 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);
    }

}

请帮助我提供一些基本的指导或建议。

标签: javaspringspring-bootrestspring-restcontroller

解决方案


如果我理解正确,您需要有一个带有查询参数的端点,如下所示:

@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 获取网站内容会更好,这样更容易从中获取您需要的数据。更多详情请访问:


推荐阅读