簡體   English   中英

如果我在服務器請求主體中有字符串列表並迭代它們,請獲取通量

[英]Get body to flux if I have list of strings in server request body and iterate over them

在我的路由中,我有一個Post端點,我希望接受我將在處理程序中處理的字符串列表。

我的問題是,如何從ServerRequest主體獲取這些字符串列表並使用Flux迭代它們?

我的路由器

@Configuration
public class TestUrlRouter {

    @Bean
    public RouterFunction<ServerResponse> routes(TestUrlHandler handler) {
        return RouterFunctions.route(
                RequestPredicates.POST("/urls").and(RequestPredicates.accept(MediaType.APPLICATION_JSON)),
                handler::testUrls
        );
    }
}

我的經紀人

@Component
public class TestUrlHandler {

    @Autowired
    private TestUrlService testUrlService;

    public Mono<ServerResponse> testUrls(ServerRequest request) {

        request.bodyToFlux(List.class) // how to iterate over strings?
    }
}

有很多方法可以實現它。

保持簡單(根據您的需要進行修改)。

protected static class WrapperList{

        private List<String> urls;

// getter & setter
}
public Mono<ServerResponse> testUrls(ServerRequest request) {       

        return request.bodyToFlux(WrapperList.class).flatMap(wrapperList -> {
            wrapperList.getUrls().stream().forEach(System.out::println);
            return ServerResponse.ok().build();
        }).take(1).next();

    }

請求負載:

{
  "urls": ["url1","url2"]
}

我終於通過這段代碼解決了它:

@Component
public class TestUrlHandler {

    @Autowired
    private TestUrlService testUrlService;

    public Mono<ServerResponse> testUrls(ServerRequest request) {

        ParallelFlux<TestUrlResult> results = request.bodyToMono(String[].class)
                .flatMapMany(Flux::fromArray)
                .flatMap(url -> testUrlService.testUrls(url))
                .doOnComplete(() -> System.out.println("Testing of URLS is done."));

        return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(results, TestUrlResult.class);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM