2016-04-04 10 views
0

私はAzure iotを初めて使用しています。私は残りのAPIを使用して紺碧のiotハブに共有アクセスポリシーを作成しようとしています。Rest APIを使用したAzure IoT Hubでの共有アクセスポリシーの作成

https://management.azure.com/subscriptions/{subscription-Id}/resourceGroups/{group-name}/providers/Microsoft.Devices/IotHubs/{hub-name}?api-version=2016-02-03"); 

と私のJavaコードは

 String policyold = "{\"tags\" : {}, \"location\": \"East Asia\",\"properties\" : \"authorizationPolicies\" : [{\"name\" : \"policy-namw\", \"primaryKey\" : \"{mykey}\" ,\"secondaryKey\" : \"secondary-key\" ,\"permissions\" :[\"ServiceConnect\" ,\"RegistryRead\" ,\"RegistryWrite\" ,\"DeviceConnect\"]}],\"eventHubEndpoints\" : { \"events\" : {\"messageRetentionInDays\":\"2\"}}}"; 


    StringEntity input1 = new StringEntity(policyold); 
    input1.setContentType("application/json"); 
    input1.setContentEncoding("UTF8"); 
    put.setEntity(input1); 

    put.setHeader("Authorization", token); 
    HttpResponse r2 = httpclient2.execute(put); 
    System.out.println(r2.getStatusLine()); 
    String content2 = EntityUtils.toString(r2.getEntity()); 
    org.json.JSONObject recvObj2 = new org.json.JSONObject(content2); 

ですが、私はfollowiingエラーに直面しています。

HTTP/1.1 400 Bad Request {"error":{"code":"InvalidRequestContent","message":"The request content was invalid and could not be deserialized: 'Error converting value \"authorizationPolicies\" to type 'System.Collections.Generic.Dictionary`2[System.String,Newtonsoft.Json.Linq.JToken]'. Path 'properties', line 1, position 76.'."}} 

また、このチュートリアルを使用しています。 https://msdn.microsoft.com/en-us/library/mt589015.aspx

これを解決するのに役立つ人はいますか?

+0

Azure IoTハブJava SDKを見れば、簡単なAPI呼び出しが可能です。リンクはhttps://github.com/Azure/azure-iot-sdks/tree/master/java – juvchan

+0

です。はい、これを共有アクセスポリシーの作成に使用しようとしました。この目的のためのコード例とドキュメントは見つかりませんでした。だから私はhttpの残りのAPIで終わる。 1つを参照できますか?ありがとう – Sadaf

答えて

1

Azure IoTHubの公式文書Common error codesによると、エラーコード400は、「要求の本文が有効ではない、たとえば解析できない、オブジェクトを検証できないなど」を意味します。

私はその後、私はJSON文字列が必要な要素Sku name & Unitsを逃した、あなたのコード内でpolicyold文字列の値をチェックします。 Jsonの要求内容の最後の下にある要素の表を注意深く参照してください。

Azure IoTHubは、複数の共有アクセスポリシーを所有できます。

新しいIoTHubを作成中に共有アクセスポリシーを作成する場合は、REST API Create a new IoT Hubを使用してください。それ以外の場合は、REST API Update metadata on an existing IoT Hubを使用して既存のIoTHubに新しいポリシーを追加してください。

+0

よろしく@PeterPan。 私はこれに私のpolicyold文字列を変更しました。 String policyold = "{\"タグ\ ":{}、\"場所\ ":\"東アジア\ "、\"プロパティ\ ":\" authorizationPolicies \ ":[{\"名前\ ": \ "セカンダリキー\"、\ "セカンダリキー\"、\ "アクセス許可\":\ "ポリシー名\"、\ "プライマリキー\ "RegistryRead"、\ "RegistryWrite \"、\ "DeviceConnect \"]}]、\ "eventHubEndpoints \":\ "events \":{\ "messageRetentionInDays \":\ "2 \"}}、\ "スキル\ ":\"名前\ ":\" S1 \ "、\"容量\ ":1}}"; でも、同じ問題に直面しています。 – Sadaf

+0

私は、既存のIoTハブRest APIの更新メタデータを使用しています。 – Sadaf

+0

@Sadaf Juvchanがコメントで述べたように、Azure IoTHub SDK for Javaを使用することをお勧めします。Java SDKが関連するRESTをラップするため、Fiddlerを使用してHTTP要求と応答をキャッチしてREST API呼び出しを認識しますAPI。参照できる[Javaで始めるためのIoTHubチュートリアル](https://azure.microsoft.com/en-us/documentation/articles/iot-hub-java-java-getstarted/)があります。 –

関連する問題