处理程序类问题上的WebFlux的基本Mono <Map <String,String >>

时间:2019-07-06 12:26:40

标签: spring-webflux

这是webflux的简单Mono<Map<String, String>>问题。首先,路由器类是

public RouterFunction<ServerResponse> routesUser(UserHandler handler) {

        return RouterFunctions.route(RequestPredicates.GET("/route/user/all"), handler::findAll)
                    .andRoute(RequestPredicates.POST("/route/user/login"), handler::authenticate);

接下来是webclient的客户端代码。

Map<String, String> mapUser = new HashMap<String, String>();
mapUser.put("username", "joseph");
mapUser.put("password", "password");

client.post().uri("/route/user/login").body(Mono.just(mapUser), Map.class).exchange()
                .map(ClientResponse::statusCode).subscribe(response -> System.out.println("Login : " + response.getReasonPhrase()));

Map<String, String> mapUser已成功传输到webflux处理程序类。

我有一个关于userhandler类的认证方法的基本问题。

public Mono<ServerResponse> authenticate(ServerRequest request) {
        Mono<Map<String, String>> monoMapUser = request.bodyToMono(Map.class);

        monoMapUser.map(m -> {
            return m.get("username");
        }).subscribe(System.out::println);

monoMapUser.subscribe(System.out::println)打印正确的用户名joseph。

我怎么能这样从monoMapUser提取用户名和密码?

String username = monoMapUser.map(m -> {return m.get("username");}.(????)
String password = monoMapUser.map(m -> {return m.get("password");}.(????)

1 个答案:

答案 0 :(得分:2)

您应该mapflatMap您的monoMapUser

public Mono<ServerResponse> authenticate(ServerRequest request) {
    return request.bodyToMono(Map.class)
            .flatMap(map -> {
                map.get("username");
                map.get("password");

                //your logic

                return ServerResponse.ok().build();
            });
}