【发布时间】:2021-01-28 22:10:58
【问题描述】:
我正在使用 Postman 向我的 Spring 应用程序发送一个 POST 请求。该请求的 JSON 正文如下所示:
{
"documents": [
{
"id": "1",
"text": "Piece of text 1",
"lang": "en"
},
{
"id": "2",
"text": "Piece of text 2",
"lang": "en"
}
],
"domain": "hr",
"text_key": "text"
}
我设置了一个方法来处理这些 POST 请求,并且我需要能够从请求正文中提取上述 JSON 数据而不会阻塞。我现在的方法看起来像这样:
public void requestBody(ServerRequest request) {
Mono<String> bodyData = request.bodyToMono(String.class);
System.out.println("\nsubscribing to the Mono.....");
bodyData.subscribeOn(Schedulers.newParallel("requestBody")).subscribe(value -> {
log.debug(String.format("%n value consumed: %s" ,value));
});
}
但是,这无济于事。我尝试查看Spring Reactive get body JSONObject using ServerRequest 中的答案 和 Getting String body from Spring serverrequest 但无济于事。请帮忙。
感谢https://stackoverflow.com/users/1189885/chrylis-cautiouslyoptimistic
根据您的回答,这就是我正在尝试的:
request.bodyToMono(String.class).map(
(String rqBody) -> {
setRequestBody(rqBody);
return ServerResponse.status(HttpStatus.CREATED).contentType(APPLICATION_JSON).body(rqBody, Object.class);
}
);
setRequestBody() 正在设置一个全局字符串变量作为请求正文。像这样:
public void setRequestBody (String rqBody){
System.out.println("\nset request body called with: " + rqBody);
request_body=rqBody;
}
但是,全局 request_body 变量仍然为空。
根据您的最新评论,这就是我正在尝试做的事情:
RedissonClient redisson = Redisson.create();
RBucket<Object> bucket = redisson.getBucket("requestKey");
request.bodyToMono(String.class).doOnNext(
(String rqBody) -> {
bucket.set(rqBody);
}
);
当我进入 Redis-cli 并尝试get requestKey 时,它给了我nil
【问题讨论】:
标签: java spring spring-boot reactive-programming spring-webflux