2016-01-13 126 views
3

我想通過Jersy客戶端調用某些「升級」REST API,Jersy客戶端聲明爲PUT並且不需要任何主體內容。如何通過Jersy REST客戶端調用PUT客戶端使用null實體

但是,當我要求如下這個API:

webTarget.request().put(Entity.json(null)); 

它給出如下錯誤:

Entity must not be null for http method PUT. 

所以要知道,有沒有jersy客戶端的任何方法來調用與PUT方法null實體。

回答

7

可以配置客戶端屬性

SUPPRESS_HTTP_COMPLIANCE_VALIDATION

缺省情況下,澤西客戶端運行時執行某些HTTP一致性檢查(諸如HTTP方法可以促進非空請求實體等)以便在用戶嘗試建立不符合HTTP規範的通信時發生異常並快速失敗。需要覆蓋這些合規性檢查並避免Jersey客戶端運行時出於某種原因拋出異常的用戶可以將此屬性設置爲true。因此,合規性問題只會在日誌中報告,不會有任何例外情況發生。

[...]

Client client = ClientBuilder.newClient(); 
client.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true); 
WebTarget target = client.target("..."); 
Response response = target.request().put(Entity.json(null)); 
+0

看來不安全和不穩健,因爲我的API將會公開。那麼是否有更多的替代解決方案而不是這個? – Atul

+0

它可以根據WebTarget上的每個請求進行配置(如果您正在重新使用客戶端)。這是我能想到的唯一可以讓你更安全的東西 –

+0

任何人都可以告訴我RESTEasy的方式或屬性嗎? –

3

我碰到了同樣的錯誤,並通過使用空文本實體解決它:

Entity<?> empty = Entity.text(""); 
webTarget.request().put(empty);