如何从ContainerRequestContext获取表单数据参数

时间:2014-09-26 06:53:49

标签: java jersey form-submit jersey-2.0 restful-architecture

我使用Jersey 2来公开功能(restfull API)。 我想在过滤器级别访问表单参数的位置,我们从“ContainerRequestContext”访问pathparamquaeryparam的方式。

过滤器: -

public class SecurityFilter implements ContainerRequestFilter, ContainerResponseFilter
{
  private ResourceInfo ResourceInfo;

    // ignore this
    public SecurityFilter(ResourceInfo ResourceInfo)
    {

    }

    @Override
    public void filter(ContainerRequestContext ctx) throws IOException
    {
        MultivaluedMap<String, String> pathparam = ctx.getUriInfo().getPathParameters();
        MultivaluedMap<String, String> quaeryparam = ctx.getUriInfo().getQueryParameters();
      // Here i want all form parameters 
    }    

    // ignore this     
    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException
    {

    }    
}

那么如何在上面的过滤器中从ContainerRequestContext获取表单参数?


编辑:

我有一种获取表单数据的方法是

((ContainerRequest) context).bufferEntity();
// Read entity
FormDataMultiPart multiPart = ((ContainerRequest) context).readEntity(FormDataMultiPart.class);
String myValue =  multiPart.getField("foo").getValue();

但是这对大文件不起作用,因为((ContainerRequest) context).bufferEntity()在内存中包含实体,因此发生Exceptionorg.glassfish.jersey.server.ContainerException: java.lang.OutOfMemoryError: Java heap space异常。

1 个答案:

答案 0 :(得分:2)

查看我对您issue opened against Jersey的评论。

基本上,您已在编辑后的文字中回答了您的问题。而且,不幸的是,如果您需要处理非常大的实体,您需要手动执行繁重的工作(缓冲和处理以及服务和清理实体流)。