弹簧引导集成URL分页解决方案



i使用spring(boot)集成以连接到RESTFULES服务并从中检索数据,以下是我的代码的某些部分:

@Bean
public PollerMetadata downloadTrigger()
{
    PeriodicTrigger trigger = new PeriodicTrigger(config.getDownloadInterval());
    trigger.setFixedRate(true);
    PollerMetadata pollerMetadata = new PollerMetadata();
    pollerMetadata.setTrigger(trigger);
    pollerMetadata.setMaxMessagesPerPoll(1);
    return pollerMetadata;
}
@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata poller()
{
    PeriodicTrigger trigger = new PeriodicTrigger(10);
    trigger.setFixedRate(true);
    PollerMetadata pollerMetadata = new PollerMetadata();
    pollerMetadata.setTrigger(trigger);
    return pollerMetadata;
}
@InboundChannelAdapter(value = "channel1", poller = @Poller("downloadTrigger"))
public ResponseEntity<AppsItem[]> download()
{
    String url = "https://example.com/?page{pageNumber}";
    try
    {
        SSLUtil.turnOffSslChecking();
    }
    catch (Exception e)
    {
    }
    HttpHeaders requestHeaders = new HttpHeaders();
    requestHeaders.setAccept(Collections.singletonList(new MediaType("application","json")));
    HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);
    template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

    ResponseEntity<AppsItem[]> responseEntity = template.exchange(url, HttpMethod.GET, requestEntity, AppsItem[].class, 10, 1);

    return responseEntity;
}
@Splitter(inputChannel = "channel1", outputChannel = "channel2")
public List<AppsItem> scrape(ResponseEntity<AppsItem[]> payload)
{
    //do something;
}

如您所见,我有一个URL,可以接受带有Pagenum名称的变量,我想在响应主体空置时增加页码,我不知道如何通过Spring Integration实施它。但是让我让我解释它需要什么:

1 - Poller calling inbound method once peer hour
2 - Inbound method start calling WebService from page 1 to page n.
3 - Inbound method should pass data to next channel before fetching next page

我需要以下类似的东西:

    @InboundChannelAdapter(value = "channel1", poller = @Poller("downloadTrigger"))
public ResponseEntity<AppsItem[]> download()
{
    String url = "https://example.com/?page{pageNumber}";
    try
    {
        SSLUtil.turnOffSslChecking();
    }
    catch (Exception e)
    {
    }
    HttpHeaders requestHeaders = new HttpHeaders();
    requestHeaders.setAccept(Collections.singletonList(new MediaType("application","json")));
    HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);
    template.getMessageConverters().add(new MappingJackson2HttpMessageConverter());

    ResponseEntity<AppsItem[]> responseEntity;
        int i = 0;
        do
        {
            i++;
            responseEntity = template.exchange(url, HttpMethod.GET, requestEntity, AppsItem[].class, 10, i);
            scraper.parse(responseEntity);
            LOG.info("entry={}", "");
            //Send response to the next channel in this loop 
        }
        while (responseEntity.hasBody());

    return responseEntity;
}

downloadTrigger中删除 setMaxMessagesPerPoll(1),并且(在每个民意调查上)将继续调用 download(),直到返回 null

增加每个呼叫的页面计数,并在不再存在页面时将其重置;在间隔之后将进行投票程序。

最新更新