[英]Spring WebFlux - Unable to return HTTP response in HandlerAdapter
I'm trying to recreate HttpServletResponse#getWriter
functionality in Spring WebFlux without success. 我试图在Spring WebFlux中重新创建
HttpServletResponse#getWriter
功能,但没有成功。
In Spring MVC, I would extend HandlerInterceptorAdapter
, use mentioned getWriter
for writing target response and return false from preHandle
method. 在Spring MVC中,我将扩展
HandlerInterceptorAdapter
,使用提到的getWriter
编写目标响应,并从preHandle
方法返回false。 I'm trying to use the following code to recreate the same functionality. 我正在尝试使用以下代码重新创建相同的功能。 See following excerpts to see what I've tried so far without success.
请参阅以下摘录,以了解到目前为止我尝试过的没有成功的内容。
@Component
public class CustomInterceptor extends RequestMappingHandlerAdapter
@Override
public Mono<HandlerResult> handle(ServerWebExchange exchange, Object handler) {
exchange.getResponse().writeWith(s -> Mono.just(new SomeDto()));
// creates Internal Server Error, custom WebExceptionHandler not called
return Mono.error(new RuntimeException());
// creates Internal Server Error, custom WebExceptionHandler not called
throw new RuntimeException();
// ignores response write
return super.handle(exchange, handler);
}
}
I've also tried to use a WebFilter
, there is a possibility to change the response, however it's not possible to access HandlerMethod
object, which is needed for further processing. 我也尝试过使用
WebFilter
,可以更改响应,但是无法访问HandlerMethod
对象,这是进一步处理所必需的。
Any idea how to do this using Spring WebFlux? 知道如何使用Spring WebFlux做到这一点吗? All ideas are welcome.
欢迎所有想法。 Thank you.
谢谢。
It is possible to handle the request/response in the new reactive WebFilter
, eg. 可以在新的反应式
WebFilter
处理请求/响应,例如。
@Component
public class SecurityWebFilter implements WebFilter{
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
if(!exchange.getRequest().getQueryParams().containsKey("user")){
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
}
return chain.filter(exchange);
}
}
Check my complete webfilter sample . 检查我完整的webfilter示例 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.