我使用Jersey 2来公开功能(restfull API)。
我想在过滤器级别访问表单参数的位置,我们从“ContainerRequestContext”访问pathparam
,quaeryparam
的方式。
过滤器: -
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
异常。
答案 0 :(得分:2)
查看我对您issue opened against Jersey的评论。
基本上,您已在编辑后的文字中回答了您的问题。而且,不幸的是,如果您需要处理非常大的实体,您需要手动执行繁重的工作(缓冲和处理以及服务和清理实体流)。