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处理程序类。

我有一个关于用户Handler类的身份验证方法的基本问题。

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)打印右用户名约瑟夫。

我如何从单个单位器中提取用户名和密码?

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

您应该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();
            });
}

最新更新