Java 如何从Dropwizard资源中访问包装在自定义类中的请求?
我正在使用Dropwizard,我想从过滤器中包装一个请求对象,并从我的资源类中访问该实例 e、 g.执行以下操作: Filter.javaJava 如何从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
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());