我有点困,所以基本上我打电话给图public static ApiResponse postRequest(String url, String apiId, Token token, Product product, String data, Object type)
throws JsonParseException, JsonMappingException, UnsupportedOperationException, IOException {
ObjectMapper mapper = new ObjectMapper();
PolicyResponse mResponse = null;
apiError apiError = null;
ApiResponse apiResponse = new ApiResponse();
InputStream responseStream = null;
try {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
headers.set("User-Agent", "MY Framework"+new Date() + new Random().nextDouble());
headers.set("Content-Type", "application/json");
if(token != null) {
headers.set(HttpHeaders.AUTHORIZATION, "Bearer " + token.getAccessToken());
}
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
headers.setCacheControl("no-cache");
HttpEntity request = new HttpEntity<>(data,headers);
logger.info("Headers " + headers);
if(token != null) {
logger.info("Token " + token.getAccessToken());
}
logger.info("PolicyURL :: " + url);
logger.info("API ID :: " + apiId);
logger.info("Request Data :: " + data);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity <JsonNode>response = restTemplate.exchange(url,
HttpMethod.POST,
request,
JsonNode.class);
logger.debug("Response Data :: " + response.getBody());
mapper.configure(Feature.AUTO_CLOSE_SOURCE, true);
if (null != response) {
apiResponse.setApiId(apiId);
if (response.getStatusCode() == HttpStatus.OK || response.getStatusCode() == HttpStatus.CREATED) {
apiResponse.setHttpResponse(response.getBody().toString());
apiResponse.setJsonNode(response.getBody());
logger.debug(response.getBody().toString());
} else {
logger.debug("Error Response " + response.getBody());
apiError apiError = mapper.readValue(response.getBody().toString(), new TypeReference<apiError>() {
});
apiResponse.setHttpResponse(response.getBody().toString());
apiResponse.setHttpResponseMessage(apiError.getMessage());
}
}
apiResponse.setHttpStatusCode(String.valueOf(response.getStatusCode()));
}
catch(HttpClientErrorException hcee) {
logger.error(hcee.getCause());
logger.error(hcee.getResponseBodyAsString());
apiResponse.setHttpStatusCode(String.valueOf(hcee.getRawStatusCode()));
apiResponse.setHttpResponse(hcee.getResponseBodyAsString());
apiResponse.setHttpResponseMessage(hcee.getMessage());
}
finally {
if(responseStream != null) {
responseStream.close();
}
}
return apiResponse;
}
api/resources/plannertaskdetails
我得到了答复,像这样:
$apiUrl = $('https://graph.microsoft.com/v1.0/planner/tasks/' + $taskId +'/details')
$response = Invoke-RestMethod -Headers @{Authorization = "Bearer $($token.access_token)"} -Uri $apiUrl -Method Get
引用和清单是列表(https://docs.microsoft.com/en-us/graph/api/resources/plannertaskdetails?view=graph-rest-1.0)
因此,当我执行$ response.checklist时,会看到@ {18907 =; 35669 =; 41911 =}(代表列表项)
例如,当我做@{@odata.context=xxxx/details/$entity; description=value 1; previewType=automatic; id=bxxxxm; references=; checklist=}
我看到$response.checklist.18907
现在我的问题是,如何才能轻松访问其中的那些列表对象。
要做类似的事情
@{@odata.type=#microsoft.graph.plannerChecklistItem; isChecked=True; title=Step 1; orderHint=; lastModifiedDateTime=; lastModifiedBy=}
在这个$ response中,我可以得到例如描述foreach($option in $response.checklist)
{
$option.Title= ....;
}
,但清单和参考没有。
否则,如果我尝试| | | | ConvertFrom-Json,出现错误无效的JSON原语等。
任何建议将不胜感激。
答案 0 :(得分:0)
我认为这应该可行:
foreach($checklistId in $response.checklist.Keys)
{
$response.checklist[$checklistId].title= ....;
}
AFAIK,Invoke-WebRequest通过解析JSON输出在PowerShell中返回解析字典结构。