2016-09-14 31 views
0

我試圖使用Java客戶端API,特別是getViewRequestBuildergetDocAs()cloudant Java客戶端getDocsAs()

我Cloudant的數據是這樣的:

{ 
    "_id": "30984feadf2246a68d97cbeff8bf06a0", 
    "_rev": "1-8df71f2f874f9228fffb831779063fa9", 
    "correlationID": "qweriwern34924df02342jk33", 
    "status": "Received", 
    "contactType": "EMAIL", 
    "ttlHours": 0, 
    "requestingId": "123456", 
    "requestingApplication": "JUnit", 
    "logTimeMs": 1466446389064, 
    "logTimeString": "20-06-2016 14:13:09", 
    "tsdHitStatus": false, 
    "emailContact": { 
    "to": "[email protected],com", 
    "bcc": "[email protected]" 
    }, 
    "sendSecure": false 
} 

我創建一個視圖返回三個字段。

if (doc. emailContact.to && doc.correlationID) { 
    emit(doc.logTimeMs, 
    { 
    correlationID: doc.correlationID, 
    emailAddress: doc.emailContact.to, 
    contactType: doc.contactType 
    }); 

我想獲得基於時間範圍的查詢並返回一個電子郵件對象。該視圖在PostMan中正常工作。當我從Java嘗試這個時,我得到了兩個字段,但emailAddress字段始終爲空。我想知道getDocAs()未能理解「doc.emailContact.to」字段。

我認爲視圖中的「emailAddress:doc.emailContact.to」這行會允許數據和類之間的映射。

的Java代碼從視圖中獲得數據:

db.getViewRequestBuilder("ch_queries","Email).newRequest(Key.Type.NUMBER, Object.class).startKey(time0).endKey(time1).includeDocs(true).reduce(false).build().getResponse().getDocsAs(Email.class); 

電子郵件類

public class Email implements Serializable { 

    private String correlationID; 
    private String emailAddress; 
    private String contactType; 

    public String getContactType() { 
     return contactType; 
    } 
    public void setContactType(String contactType) { 
     this.contactType = contactType; 
    } 
    public String getCorrelationID() { 
     return correlationID; 
    } 
    public void setCorrelationID(String correlationID) { 
     this.correlationID = correlationID; 
    } 
    public String getEmailAddress() { 
     return emailAddress; 
    } 
    public void setEmailAddress(String emailAddress) { 
     this.emailAddress = emailAddress; 
    } 
} 

回答

1

爲什麼當你想到這是不工作的原因是因爲你正試圖獲得將您在查看結果中包含的文檔記錄爲Email的實例。因此,首先要做的是從查詢中刪除includeDocs(true)

下一頁什麼,你應該做的是鍵入ViewRequest到

ViewResponse<Integer, Email> response; 
response = db.getViewRequestBuilder("ch_queries","Email") 
       .newRequest(Key.Type.NUMBER,Email.class) 
       .startKey(time0) 
       .endKey(time1) 
       .reduce(false) 
       .build() 
       .getResponse() 

可以使用比遍歷響應增強的for循環,像這樣:

for (ViewResponse.Row<Integer, Email> row : response.getRows()) { 
    Email email = row.getValue(); 
}