2017-07-21 3 views
1

nifiインスタンスでコントローラ・サービスを更新しようとすると問題が発生します。私はnifiインスタンスに "put"リクエストを行い、コントローラサービスを無効にしようとします。「メッセージ本文が不正です」400のレスポンス・コントローラ・サービスを更新すると400という応答が返される

これは私のロジックである:

  • はControllerServiceEntityオブジェクト

  • 更新状態に特定のコントローラサービス(コントローラサービス/ {ID})

  • 解析応答メッセージを取得します - > currentService.Component.State = "DISABLED"のようなサービス。 (私はちょうど状態popertyを更新する最初の時間で同じエンティティのすべての部分)

  • シリアライズ修飾サービスインスタンス

  • 更新サービス(コントローラサービス/ {ID})

ため
  • 要求nifi-APIのPUT

    「メッセージ本文が正しくありません。期待どおりのフォーマットにマップできません」というBadrequest応答が表示されます。メッセージ。

    public async Task<T> Put<T>(Uri url,T data) where T:IBaseEntitty 
        { 
         T resultEntity = default(T); 
          using (var client = new HttpClient()) 
          { 
           var jsonSerializerSettings = new JsonSerializerSettings 
           { 
            ContractResolver = new CamelCasePropertyNamesContractResolver() 
           }; 
           var requestContent = new StringContent(JsonConvert.SerializeObject(data,jsonSerializerSettings), Encoding.UTF8, "application/json"); 
           var response = client.PutAsync(url,requestContent); 
           var content = response.Result.Content; 
           using (var reader = new StreamReader(await content.ReadAsStreamAsync())) 
           { 
            var result = await reader.ReadToEndAsync(); 
            if (response.Result.StatusCode == HttpStatusCode.OK) 
            { 
             var template = Newtonsoft.Json.JsonConvert.DeserializeObject(result, typeof(T)); 
             if (template != null) 
             { 
              resultEntity = (T)template; 
             } 
            } 
           } 
          } 
         return resultEntity; 
        } 
    

    任意のアイデアください

    これは、PUT要求のための私の方法はありますか?

  • 答えて

    1

    私はリクエストメッセージが短いと理解しています。私の悪いことはエンティティ全体を送っていた。デベロッパーツールをブラウザに開き、nifiインスタンスの独自のリクエストを確認して、私と比較しました。リクエストが、エンティティ全体ではなく更新されることに気がつきました。

    リクエスト本体には、状態とリビジョン情報だけが含まれている必要があります。

    {"revision":{"clientId":"644bf345-015d-1000-e82d-047f6a9f9432","version":15},"component":{"id":"015b1030-a099-13d3-812c-77772afcaeb0","state":"DISABLED"}} 
    

    を、私は、この情報に従って、私のコードを変更:これは、コントローラのサービスを無効にしたときにnifi-インスタンスによって送信することを要求体です。私は期待通りに働いていたよりも1を既存のではなく、新しいコントロール・サービス・インスタンスを送信した後

    var controllerService = new ControllerServiceEntity(); 
         controllerService.Id = existingService.Id; 
         controllerService.Revision = existingService.Revision; 
    
         var component = new ControllerServiceDTO(); 
         component.Id = existingService.Component.Id; 
         component.State = "DISABLED"; 
         controllerService.Component = component; 
    

    :これは無効にするcontrollサービスを設定し、私のサンプルコードです。

    1

    応答本体には、要求が失敗した理由を示すメッセージが含まれている必要があります。さらに、<NIFI_HOME>/logs/nifi-user.log<NIFI_HOME>/logs/nifi-app.logに詳細が含まれている場合があります。

    また、ウェブブラウザで開発者ツールを開いて、これらのリクエストを実際に表示することをおすすめします。 UIは、すべての機能に排他的にREST APIを使用します。

    +0

    「メッセージ本文が正しくありません。期待どおりのフォーマットにマップできません。」を除き、メッセージに失敗する理由はありませんでした。しかし、あなたが書いた情報は役に立ちました。私は心に留めておきます。ありがとう。 – nzrytmn

    関連する問題