2016-11-28 7 views
1

私は春とジャージーでは新しいです。私は、要求が正しいパラメータを持っているかどうかを確認するためにFilterを構築しようとしています。これは私が確認したいJSONの一部です:ContainerRequestContextからDTOオブジェクトを構築するためのデータを取得する方法

"request":{ 
     "application":"1 Android Mobile", 
     "version":1 
    } 

データの要素が私のVersionDTOの一部です:

public class VersionDTO { 
    int version; 
    String application; 

    public String getApplication() { 
     return application; 
    } 

    public void setApplication(String application) { 
     this.application = application; 
    } 

    public int getVersion() { 
     return version; 
    } 

    public void setVersion(int version) { 
     this.version = version; 
    } 

} 

これは私のフィルタのコードです:

@Override 
    public void filter(ContainerRequestContext requestContext) throws FilterException { 

     if (isSecureURL(requestContext.getUriInfo().getPath())){}{ 
      try { 

       versionFilterService.setVersionDTO(//here is where I want to pass the VersionDTO object with the data of the requestContext); 
      } catch (ServiceException e) { 
        e.printStackTrace(); 
      } 
     } 
    } 

    private boolean isSecureURL(String url) { 
     return !UnSecureUrlEnum.isUnSecureUrl(url); 
    } 
} 

私がしたいのは、データをContainerRequestContextから取得し、そのオブジェクトをサービスに渡すためのVersionDTOを構築することです。これは可能ですか?

ありがとうございます。

答えて

1

フィルタでエンティティを取得することはできませんが、入力ストリームを取得する必要がありますが、ストリーミングできるのはわずかなことに注意する必要があります。 これを確認してください。How to use Jersey interceptors to get request body

1

はい、可能です。 Jerseyを使用すると、ストリームを読み込む前にバッファリングすることができ、ストリームを再度読み取ることができます。あなたはContainerRequestにキャストする必要があります。ここでbufferEntity()、次に簡略化されたオブジェクトを取得するにはreadEntityです。

@Override 
public void filter(ContainerRequestContext requestContext) throws FilterException { 

    ContainerRequest cr = (ContanerRequest) requestContext; 
    cr.bufferEntity(); 
    VersionDTO dto = cr.readEntity(VersionDTO.class); 
} 
関連する問題