2014-09-26 3 views
2

Jersey 2를 사용하여 기능을 노출했습니다 (restfull API). 여기서`ContainerRequestContext '에서 pathparam, quaeryparam에 액세스 한 방식으로 필터 수준에서 양식 매개 변수에 액세스하려고합니다.ContainerRequestContext에서 양식 데이터 매개 변수를 가져 오는 방법

필터 : -

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(); 

입니다하지만 너무 Exceptionorg.glassfish.jersey.server.ContainerException: java.lang.OutOfMemoryError: Java heap space 예외가 발생 ((ContainerRequest) context).bufferEntity() 메모리에 개체가 포함되어 있으므로이 큰 파일에 대해 작동하지 않습니다 .

+0

큰 엔터티의 경우 엔티티를 임시 파일에 수동으로 버퍼링 한 다음 엔티티 스트림을 대체하여 임시 파일에서 엔티티를 읽는 스트림을 가리켜 야합니다. 현재이 사용 사례에서이 유스 케이스에 대해 Jersey에는 다른 기성품 지원이 없습니다. 유감스럽게 생각합니다. –

답변

2

내 의견을 issue opened against Jersey에게 보냅니다.

본질적으로 이미 수정 된 텍스트에서 질문에 답변했습니다. 그리고 불행히도 매우 큰 개체를 처리해야하는 경우에는 순간에 수동으로 무거운 작업을 수행해야합니다 (버퍼링 & 처리 & 제공 & 엔티티 스트림 정리).

+0

저지에서 열린 미해결 문제를 해결하는 @marek 감사합니다. – HybrisFreelance

관련 문제