统一处理响应
ResponseBodyResultHandler
是 Spring WebFlux 中用于处理返回结果的类,它的作用是将返回结果转换为 ServerHttpResponse
可以处理的类型,然后写入到响应中。我们可以通过继承 ResponseBodyResultHandler
来实现自定义的返回结果处理器。只需要重写 handleResult
方法即可。
@Slf4j
public class GlobalResponseBodyHandler extends ResponseBodyResultHandler {
public GlobalResponseBodyHandler(List<HttpMessageWriter<?>> writers, RequestedContentTypeResolver resolver) {
super(writers, resolver);
}
@Override
@NonNull
public Mono<Void> handleResult(@NonNull ServerWebExchange exchange, @NonNull HandlerResult result) {
ReactiveAdapter adapter = getAdapter(result);
if (adapter != null) {
// 如果返回结果是 Mono 类型,则进行处理
Mono<Map<String, Object>> body = ((Mono<?>) Objects.requireNonNull(result.getReturnValue())).map(data -> {
Map<String, Object> map = new HashMap<>();
map.put("data", data);
map.put("code", 200);
map.put("message", "success");
return map;
});
return writeBody(body, result.getReturnTypeSource().nested(), exchange);
} else {
Map<String, Object> map = new HashMap<>();
map.put("data", result.getReturnValue());
map.put("code", 200);
map.put("message", "success");
return writeBody(Mono.just(map), result.getReturnTypeSource().nested(), exchange);
}
}
}
@Bean
public GlobalResponseBodyHandler responseWrapper(ServerCodecConfigurer serverCodecConfigurer, RequestedContentTypeResolver requestedContentTypeResolver) {
return new GlobalResponseBodyHandler(serverCodecConfigurer.getWriters(), requestedContentTypeResolver);
}
最后更新于
这有帮助吗?