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