【问题标题】:How to clone ServerResponse in Spring Boot Webflux如何在 Spring Boot Webflux 中克隆 ServerResponse
【发布时间】:2018-10-11 20:13:31
【问题描述】:

我正在为我的 REST Web 应用程序使用 Spring Boot 2.0.1.RELEASE 和功能端点。我想为所有传出响应添加一个自定义标头,我有一个过滤器。我面临的问题是,如何克隆由底层处理程序创建的ServerResponse。 ServerResponse.from 构建一个新的ServerResponse,但仅包含标题和状态。如何复制正文?

【问题讨论】:

  • 你有没有想过这个问题?这似乎是 API 的一个非常奇怪的限制......
  • 我是通过WebFilter 完成的。请查看课程github.com/nnanda2016/springboot2-controller-demo/blob/master/…。这允许修改请求和响应标头exchange.getResponse().getHeaders().add("X-Server-Trace-Id", span.context().traceIdString());

标签: java spring-boot spring-webflux


【解决方案1】:

ServerResponse 中的大多数方法都为您提供了 BodyBuilder,并且您可以使用 BodyBuilder 使用 BodyInserters 对象添加您的身体,并希望是其中的一种方法。见下文:-

ServerResponse.BodyBuilder bodyBuilder = ServerResponse.status(HttpStatus.OK);
bodyBuilder.body(BodyInserters.fromObject("test"));

【讨论】:

  • 如果我没有说清楚,我很抱歉,但我的全部目的是添加更多标题(到我所有传出的回复中),我想在一个常见的地方,比如过滤器.我不想篡改每个处理程序已经创建的响应体;而不是插入几个标题。所以,我不能按照你的建议使用BodyInserters。
  • 您能否将代码添加到您的问题中以查看您目前拥有的内容
  • 请检查github.com/nnanda2016/springboot2-controller-demo,文件为com.demo.fn.web.filter.RequestTxContextFilter。使用当前代码,响应 HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 X-Trace-Id: 34cb3eb8-9e66-4a02-83f1-0071a5c64516 content-length: 0 someCommonHeader: commonValue
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
  • 2018-05-11
  • 2020-02-09
  • 2021-11-05
  • 2018-08-24
相关资源
最近更新 更多