簡體   English   中英

郵件正文格式錯誤。 更新控制器服務時,無法映射為預期的格式”響應,並帶有400錯誤的請求

[英]“Message body is malformed. Unable to map into expected format” response with 400 Bad request when update controller service

嘗試在nifi實例上更新控制器服務時遇到問題。 我嘗試向nifi實例發出“放置”請求並禁用控制器服務。

這是我的邏輯:

  • 獲取特定的控制器服務(controller-services / {id})

  • 將響應消息解析為ControllerServiceEntity對象

  • 更新服務狀態,例如-> currentService.Component.State =“ DISABLED”; (實體的所有部分與第一次我都只更新狀態信息相同)

  • 序列化修改后的服務實例

  • 請求nifi-api放置更新服務(controller-services / {id})

我收到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;
    }

有什么想法嗎?

響應正文應包含一條消息,指示請求失敗的原因。 此外, <NIFI_HOME>/logs/nifi-user.log<NIFI_HOME>/logs/nifi-app.log可能包含更多詳細信息。

另外,我建議您在Web瀏覽器中打開“開發人員工具”以查看這些請求的執行情況。 UI全部使用REST API來實現所有功能。

據我了解,請求消息應該簡短; 我的壞事是將整個實體寄回了。 我在瀏覽器上打開了開發人員工具,檢查了nifi實例自身的請求,並與我的進行了比較:我發現請求只是包含將要更新的屬性,而不是整個實體。

請求正文必須僅包含狀態和修訂信息。 這是在禁用控制器服務時通過nifi-instance發送的請求正文:

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

我根據此信息更改了代碼。 這是我的示例代碼,用於設置controll-service來禁用:

  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;

在我發送新的控制服務實例而不是現有的實例之后,它按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM