gpt4 book ai didi

spring-boot - webflux Mono 响应为空

转载 作者:行者123 更新时间:2023-12-02 02:50:20 26 4
gpt4 key购买 nike

我的项目中有一个非常简单的 spring webflux 休息端点。

@Bean
public RouterFunction authRoute() {
return RouterFunctions.route(POST("/auth/signin").and(accept(APPLICATION_JSON)), this::signIn)
.andRoute(POST("/auth/signup").and(accept(APPLICATION_JSON)), this::signUp)
.andRoute(POST("/auth/test").and(accept(APPLICATION_JSON)), this::test);
}

/auth/test 端点只需使用提供的用户名进行回复。

public Mono<ServerResponse> test(ServerRequest request) {
System.out.println("Start test ");
Mono<JwtRequest> jwtRequestMono = request.bodyToMono(JwtRequest.class);
jwtRequestMono.subscribe(v -> System.out.println(v.getUsername() + ":" + v.getPassword()));
return jwtRequestMono
.flatMap(j -> ServerResponse.ok().contentType(APPLICATION_JSON).bodyValue(j.getUsername()));
}

terminal

我面临的问题是响应正文为空,它应该是用户名。我还验证了当我返回硬编码字符串时,它会通过。当我依赖 jwtRequestMono.flatMap(...

![postman

最佳答案

这行几乎肯定是你的失败:

jwtRequestMono.subscribe(v -> System.out.println(v.getUsername() + ":" + v.getPassword()));

您的请求不能多次订阅 - 因此在此行订阅它(它可以按预期工作并打印出值),然后框架> 订阅了它,它就爆炸了。默认情况下发生这种情况时,我希望看到异常并返回 500 响应,因此您很可能在某处吞下了异常。

切勿在您自己的应用程序内订阅。这是框架的工作。

相反,如果您希望产生“副作用”,即在值传入时将其打印出来,请使用 doOnNext() 作为 react 链的一部分:

return jwtRequestMono
.doOnNext(v -> System.out.println(v.getUsername() + ":" + v.getPassword()))
.flatMap(j -> ServerResponse.ok().contentType(APPLICATION_JSON).bodyValue(j.getUsername()));

关于spring-boot - webflux Mono 响应为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62103053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com