Spring Webflux:在WebFilter中写入响应正文

问题描述 投票:0回答:1

我正在尝试编写一个

WebFilter
对 http 请求进行一些检查。如果检查失败,我想返回 http 错误 400,并以错误消息作为响应正文。

我有这个代码:

@Order(1)
@Component
public class CheckingFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {

        String errorMessage = doSomeChecks();
        if (errorMessage == null) {
            return chain.filter(exchange);
        } else {
            ServerHttpResponse response = exchange.getResponse();
            response.setStatusCode(HttpStatus.BAD_REQUEST);
            DataBuffer responseBuffer = response.bufferFactory().wrap(errorMessage.getBytes(StandardCharsets.UTF_8));
            return response.writeWith(Mono.just(responseBuffer));
        }
    }
}

检查失败时,返回码设置正确,但响应体为空。如何编写响应正文?

java spring-webflux
1个回答
0
投票

我错过了

Content-Type
标题。这是更新后的工作代码:

@Order(1)
@Component
public class CheckingFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {

        String errorMessage = doSomeChecks();
        if (errorMessage == null) {
            return chain.filter(exchange);
        } else {
            ServerHttpResponse response = exchange.getResponse();
            response.setStatusCode(HttpStatus.BAD_REQUEST);
            response.getHeaders().setContentType(MediaType.TEXT_PLAIN);
            DataBuffer responseBuffer = response.bufferFactory().wrap(errorMessage.getBytes(StandardCharsets.UTF_8));
            return response.writeWith(Mono.just(responseBuffer));
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.