Java 如何从Dropwizard资源中访问包装在自定义类中的请求?

Java 如何从Dropwizard资源中访问包装在自定义类中的请求?,java,jersey,dropwizard,Java,Jersey,Dropwizard,我正在使用Dropwizard,我想从过滤器中包装一个请求对象,并从我的资源类中访问该实例 e、 g.执行以下操作: Filter.java public class ServiceRequestExtractionFilter implements Filter { public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, S

我正在使用Dropwizard,我想从过滤器中包装一个请求对象,并从我的资源类中访问该实例

e、 g.执行以下操作:

Filter.java

public class ServiceRequestExtractionFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) {
            HttpServletRequest httpRequest   = (HttpServletRequest) request;

            ProxyResourceRequest requestWrapper = new RequestWrapper(httpRequest, svcRequestData);

            chain.doFilter(requestWrapper, response);
        }
    }
...
Resource.java

@Path("/test")
@Produces(MediaType.APPLICATION_JSON)
public class DemoResource {

    @GET
    @Timed
    public Response get(@Context UriInfo uriInfo, @Context RequestWrapper request) {

...

这不起作用,我也没有任何理由期待它,但这似乎是一个很好的方式来解释我正在尝试做什么。

试试这里记录的容器过滤器:

只需在应用程序运行()中添加以下内容:


请问最终目标是什么?我以前不需要这样做,但我想知道如果我知道资源中所需的行为/数据是什么,是否有其他方法可以建议。谢谢!我最终解决了这个问题,有几个项目后来过渡到了o-Spring Boot,但最好晚一点再做,对吗?
public class DateNotSpecifiedFilter implements ContainerRequestFilter {

    @Context ExtendedUriInfo extendedUriInfo;

    @Override
    public ContainerRequest filter(ContainerRequest request) {
        boolean methodNeedsDateHeader = extendedUriInfo.getMatchedMethod().isAnnotationPresent(DateRequired.class);
        String dateHeader = request.getHeaderValue(HttpHeaders.DATE);

        if (methodNeedsDateHeader && dateHeader == null) {
            Exception cause = new IllegalArgumentException("Date Header was not specified");
            throw new WebApplicationException(cause, Response.Status.BAD_REQUEST);
        } else {
            return request;
        }
    }
}
environment.jersey().getResourceConfig().getContainerRequestFilters().add(new DateNotSpecifiedFilter());