我想在服务器响应过滤器方法中记录请求正文。我试过了:
@ServerResponseFilter
public Uni<Void> filter(ContainerRequestContext request, ContainerResponseContext response) {
logger.info(((QuarkusResteasyReactiveRequestContext) request).getRequestEntity());
return Uni.createFrom().nullItem();
}
但它没有工作,因为:
java.lang.ClassCastException: class io.quarkus.resteasy.reactive.server.runtime.filters.PreventAbortResteasyReactiveContainerRequestContext cannot be cast to class io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext (io.quarkus.resteasy.reactive.server.runtime.filters.PreventAbortResteasyReactiveContainerRequestContext and io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext are in unnamed module of loader io.quarkus.bootstrap.classloading.QuarkusClassLoader @ae13544)
我怎样才能做到这一点?
这个框架还不支持。请求在这里https://github.com/quarkusio/quarkus/issues/17280
首先,在登录到控制台之前,您应该真正检查请求正文的类型是JSON XML还是任何人类可读的格式。你不希望从图片上传中发现你的日志是16gb的unicode字符大小。
这是我认为你可能正在寻找(未经测试,所以可能需要一些修复)。
@ServerResponseFilter
public Uni<Void> filter(ContainerRequestContext request, ContainerResponseContext response) {
logger.info(new String(request.getEntityStream().readAllBytes(), StandardCharsets.UTF_8));
return Uni.createFrom().nullItem();
}