java 如何将远程文件资源作为输入传递给ResourceLoader

jk9hmnmh  于 2023-05-12  发布在  Java
关注(0)|答案(1)|浏览(111)

bounty还有3天到期。回答此问题可获得+50声望奖励。user352290正在寻找一个答案从一个有信誉的来源

下面是一个代码片段,用于将银行位置特定信息加载到JSON文件中。

@Autowired
private ResourceLoader resourceLoader;

readFile("classpath:/HCBL.json");

private InputStream readFile(String fileName) throws Exception {
    Resource resource = resourceLoader.getResource(fileName);
    return resource.getInputStream();
}

我不想从本地文件阅读,而是指向远程GitHub存储库(比如https://github.com/razorpay/ifsc-api/tree/master/data),而不是将文件复制到类路径(比如src/main/resources)并直接加载它们

vwoqyblh

vwoqyblh1#

如果我没理解错的话。您希望从给定的存储库路径中自动检索JSON文件列表,然后读取所有这些文件。
这段代码是一个如何实现它的简化示例:

@Autowired
private ResourceLoader resourceLoader;

@Bean
CommandLineRunner run(ObjectMapper objectMapper) {
    return a ->
    {
        // (1)
        List<UrlObject> urlObjects = objectMapper.readValue(
                new URL("https://api.github.com/repos/razorpay/ifsc-api/contents/data"),
                new TypeReference<>() {}); 
        
        List<String> urls = urlObjects.stream()
                .map(obj -> obj.name)
                .filter(name -> name.endsWith("json")) // (2)
                .map(name -> "https://raw.githubusercontent.com/razorpay/ifsc-api/master/data/" + name)
                .peek(System.out::println) // (3)
                .collect(Collectors.toList());

        // do whatever you need with given urls
        for (String url : urls) {
            InputStream is = readFile(url);
        }
    };
}

private InputStream readFile(String fileName) throws Exception {
    Resource resource = resourceLoader.getResource(fileName);
    return resource.getInputStream();
}
static class UrlObject {
    @JsonProperty("name")
    String name;
}

(1)首先我们使用github API:https://docs.github.com/en/rest/repos/contents?apiVersion=2022-11-28#get-repository-content以检索存储库中给定路径的内容。
(2)应用了针对json文件的附加过滤器。
(3)仅用于调试,可以在以后删除

相关问题