컨트롤러 서비스를 업데이트 할 때 400 잘못된 요청으로 "메시지 본문이 잘못되었습니다. 예상 한 형식으로 매핑 할 수 없습니다."응답

nzrytmn

nifi 인스턴스에서 컨트롤러 서비스를 업데이트하려고 할 때 문제가 있습니다. nifi 인스턴스에 "put"요청을하고 컨트롤러 서비스를 비활성화하려고합니다.

이것은 내 논리입니다.

  • 특정 컨트롤러 서비스 가져 오기 (controller-services / {id})

  • ControllerServiceEntity 개체에 대한 응답 메시지 구문 분석

  • -> currentService.Component.State = "DISABLED"와 같은 서비스 상태 업데이트; (처음으로 상태 poperty를 업데이트 한 것과 동일한 엔티티의 모든 부분)

  • 수정 된 서비스 인스턴스 직렬화

  • 업데이트 서비스를위한 nifi-api put 요청 (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;
    }

제발 어떤 아이디어?

nzrytmn

내가 이해하는대로 요청 메시지는 짧아야합니다. 내 잘못은 전체 개체를 돌려 보내는 것이 었습니다. 브라우저에서 개발자 도구를 열고 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;

내가 예상했던 것보다 기존 인스턴스 대신 새 제어 서비스 인스턴스를 보낸 후.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관