gpt4 book ai didi

Jersey JAX-RS : extend logging over resource-class dispatching

转载 作者:行者123 更新时间:2023-12-04 10:55:35 24 4
gpt4 key购买 nike

我将 Jersey JAX-RS 用于 REST 服务。
我在我的程序中使用 GrizzlyHttp 在 SE-Deployment 中运行它。

我还注册了一个记录器,可以打印出 HTTP 请求和响应。

我缺少的是在 HTTP 服务器和资源类“之间”进行日志记录。

如果没有路径匹配或路径匹配但参数不匹配或类似情况,我想查看日志条目。今天我需要检查我的注释并将其与记录的 HTTP 参数进行比较。多一点日志记录会很有帮助。

那可能吗?

最佳答案

您可以通过使用 来实现它预配筛选。

预匹配过滤器是在 JAR-RS 运行时尝试将请求与资源匹配之前调用的过滤器。这种类型的过滤器允许您记录请求的 URI,即使它可能与您的任何资源都不匹配。您使用 @PreMatching 注释过滤器注释,这就是在资源匹配阶段之前调用过滤器所需要做的全部工作。

注: :如果您希望您的过滤器在提供程序扫描阶段被 JAX-RS 运行时发现,那么您需要使用 @Provider 对其进行注释。注解。或者,您可以在应用程序设置中手动注册它(正如我所做的,这就是为什么在下面的示例中我没有使用 @Provider 注释过滤器的原因)。

这是一个非常简单的预匹配过滤器示例。

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.PreMatching;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import java.io.IOException;

@PreMatching
public class PreMatchingFilterExample implements ContainerRequestFilter {

private final static Logger LOG = LogManager.getLogger(PreMatchingFilterExample.class);
@Context
UriInfo uriInfo;

@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
LOG.info("Resource not found: " + uriInfo.getAbsolutePath());
LOG.info("Path params: " + uriInfo.getPathParameters());
LOG.info("Query params: " + uriInfo.getQueryParameters());
}
}

关于 Jersey JAX-RS : extend logging over resource-class dispatching,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59223664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com