MS Graph создает команды, отвечающие на неверный запрос, «онлайн-собрание не может быть нулевым». - PullRequest
1 голос
/ 11 июля 2020

Я пытаюсь создать встречу через веб-приложение с помощью запроса HttpPost, но получаю ошибку 400 BadRequest с сообщением «onlinemeeting не может быть пустым».

HttpPost httpPost = new HttpPost("https://graph.microsoft.com/v1.0/me/onlineMeetings");
        
LocalDateTime meetingTime = java.time.LocalDateTime.now();
        
try {
    JSONObject bodyJson = new JSONObject();
        
    bodyJson.put("meetingType", "meetNow"); //tried with and without this and still didn't work
    bodyJson.put("startDateTime", meetingTime.toString());
    bodyJson.put("subject", "TeamsMeeting");
    bodyJson.put("participants", new JSONObject().put("organizer", 
            new JSONObject().put("identity", 
                    new JSONObject().put("user", 
                            new JSONObject().put("id", userId)))));
    
    StringEntity entity = new StringEntity(bodyJson.toString());
    entity.setContentType("application/json");
    httpPost.setEntity(entity);
            
    BasicHeader authHeader = new BasicHeader("Authorization", "Bearer " + teamsToken);
    httpPost.addHeader(authHeader);
    httpPost.addHeader("Content-Type", "application/json");
        
            
    HttpResponse postResponse = httpClient.execute(httpPost);
    String responseContent = EntityUtils.toString(postResponse.getEntity(), StandardCharsets.UTF_8.name());
...

Я получаю это при выполнении почтового запроса:

{
    "error": {
        "code":"BadRequest",
        "message":"onlinemeeting cannot be null.",
        "innerError": {
            "date":"2020-07-10T19:09:48",
            "request-id":"cfad7871-6595-4efb-a262-13ac42f0e599"
        }
    }
}

Он работает, когда я использую почтальон, но я не могу, когда нажимаю его через свое веб-приложение. Есть идеи, что может быть причиной этого? Что-то не так с кодом Java? Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 15 июля 2020

Используйте код ниже, он сработал для меня:

        OkHttpClient client = new OkHttpClient();
        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, json);
        Request request = new Request.Builder()
          .url(authHelper.getMsGraphEndpointHost() + url)
          .post(body)
          .addHeader("content-type", "application/json")
          .addHeader("authorization", accessToken)
          .addHeader("cache-control", "no-cache")
          .build();

        Response responseOk = client.newCall(request).execute();
0 голосов
/ 04 августа 2020

Проблема закончилась с startDateTime, потому что я думаю, что это не было в точном требуемом формате. Сообщение об ошибке не указывает на то, что это было это значение, но после удаления его из тела json оно работало без необходимости использования объекта OnlineMeeting.

0 голосов
/ 13 июля 2020

Если вы создаете онлайн-встречу с токеном пользователя , в MS Graph есть do c из OnlineMeeting с Java.

IGraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();

OnlineMeeting onlineMeeting = new OnlineMeeting();
onlineMeeting.startDateTime = "2019-07-12T21:30:34.2444915+00:00";
onlineMeeting.endDateTime = "2019-07-12T22:00:34.2464912+00:00";
onlineMeeting.subject = "User Token Meeting";

graphClient.me().onlineMeetings()
    .buildRequest()
    .post(onlineMeeting);

Если вы создаете онлайн-встречу с токеном приложения , попробуйте следующий код:

IGraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider( authProvider ).buildClient();

OnlineMeeting onlineMeeting = new OnlineMeeting();
onlineMeeting.startDateTime = "2019-07-12T21:30:34.2444915+00:00";
onlineMeeting.endDateTime = "2019-07-12T22:00:34.2464912+00:00";
onlineMeeting.subject = "Application Token Meeting";

MeetingParticipants meetingParticipants = new MeetingParticipants();
meetingParticipants.organizer.identity.user.id = "550fae72-d251-43ec-868c-373732c2704f";
onlineMeeting.participants = meetingParticipants;


graphClient.me().onlineMeetings()
.buildRequest()
.post(onlineMeeting);

Подробнее о классе OnlineMeeting см. здесь .

...