这是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");}.(????)
答案 0 :(得分:2)
您应该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();
});
}