2016-09-14 14 views
0

私はJavaクライアントAPIを使用しようとしています、特にgetViewRequestBuildercloudant JavaクライアントgetDocsAs()

getDocAs()と私の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から試してみると、2つのフィールドが得られますが、emailAddressフィールドは常にnullです。 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); 

Emailクラス

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)を削除することです。

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

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

にViewRequestを入力している何をやるべき次のあなたは、よりそうのようなforループ強化を使用して応答を反復処理することができます

関連する問題