我正在尝试编写一个
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));
}
}
}
检查失败时,返回码设置正确,但响应体为空。如何编写响应正文?
我错过了
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));
}
}
}