2016-11-28 49 views
1

我是春季和運動衫的新手。我試圖建立一個過濾器來檢查請求是否有正確的參數。這是我想檢查的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

是的,這是可能的。使用Jersey,您可以在讀取數據流之前緩衝數據流,以便再次讀取數據流。你需要投球澤西ContainerRequest你可以bufferEntity()然後只需readEntity獲得反序列化的對象。

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

    ContainerRequest cr = (ContanerRequest) requestContext; 
    cr.bufferEntity(); 
    VersionDTO dto = cr.readEntity(VersionDTO.class); 
} 
相關問題