如果我在服务器请求主体中具有字符串列表并对其进行迭代,则将主体转换为通量

时间:2019-04-06 13:31:53

标签: java spring spring-webflux

在我的路线中,我有一个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?
    }
}

2 个答案:

答案 0 :(得分:0)

有很多方法可以实现它。

保持简单(根据需要进行修改)。

string coord::toString() const // added const
{
    ostringstream out;

    out << "[" << x << ", " << y << ", " << z << "]";

    return out.str();
}
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();

    }

答案 1 :(得分:0)

我终于通过以下代码解决了它:

@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);
    }
}