Basic Mono> WebFlux на вопрос класса обработчика - PullRequest
0 голосов
/ 06 июля 2019

Это простой Mono<Map<String, String>> вопрос webflux.Во-первых, класс маршрутизатора

public RouterFunction<ServerResponse> routesUser(UserHandler handler) {

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

И следующий - клиентские коды веб-клиента.

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.

У меня есть основной вопрос о методе authenticate класса 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 Ответ

2 голосов
/ 07 июля 2019

Вы должны map или flatMap ваш 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();
            });
}
...