Spring WebFlux - 无法在HandlerAdapter中返回HTTP响应

时间:2018-02-08 14:26:35

标签: java spring spring-boot spring-webflux

我试图在Spring WebFlux中重新创建HttpServletResponse#getWriter功能但没有成功。

在Spring MVC中,我会扩展HandlerInterceptorAdapter,使用提到的getWriter来编写目标响应并从preHandle方法返回false。我尝试使用以下代码重新创建相同的功能。请参阅以下摘录,了解到目前为止我没有成功的尝试。

@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);
    }
}

我还尝试使用WebFilter,有可能更改响应,但是无法访问HandlerMethod对象,这是进一步需要的处理

知道如何使用Spring WebFlux执行此操作吗?欢迎所有想法。谢谢。

1 个答案:

答案 0 :(得分:0)

可以在新的反应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);
    }
}

检查我的完整webfilter sample