Метрики Azure COSMOSDB — HttpClientErrorException$BadRequest: 400 неверный запрос — не удалось использовать REST API

Azure CosmosDB — метрика «Частота запросов запросов Mongo», которую я хочу получить. Предоставленный Microsoft URL-адрес отлично работает, когда я использую postman. Но если я использую WebClient или RestTemplate, он выдает исключение:

org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request
    at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:79)

Вот мой код:

public Mono<DataVO> getQueryRequestRate(String subscriptionId, String resourceGroup, String cosmosDbName) {

        String [] dateTimes = getDateTimes() ;

        String url=  "/subscriptions/"+subscriptionId+"/resourceGroups/"+resourceGroup +
                "/providers/Microsoft.DocumentDb/databaseAccounts/"+cosmosDbName +
                "/metrics?api-version=2015-04-08&$filter=%28name.value%20eq%20%27Mongo Query Request Rate%27%29%20and" +
                "%20timeGrain%20eq%20duration%27PT5M%27%20and%20startTime%20eq%20"+dateTimes[0] +
                "Z%20and%20endTime%20eq%20"+dateTimes[1]+"Z";


        webClient = WebClient.builder().baseUrl("https://management.azure.com")             
                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).build();

        return webClient.get().uri(url)         
                .header("Authorization", "Bearer "+token)
                .exchange()
                .flatMap(resp -> resp.bodyToMono(DataVO.class));                   
    }




public String[] getDateTimes() {        

        LocalDateTime ldtNow = LocalDateTime.now();
        LocalDateTime ldtBefore = LocalDateTime.now().minusMinutes(5);

        String[] currentDateTime = new String[2];

        currentDateTime[0]=String.valueOf(ldtBefore);
        currentDateTime[1]=String.valueOf(ldtNow);

        return currentDateTime;
    }

Похоже на проблему с формированием запроса. Вот почему это терпит неудачу.

Любая помощь?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
0
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Произошла ошибка при формировании URL-адреса, которую я исправил сейчас.

public Mono<DataVO> getQueryRequestRate(String subscriptionId, String resourceGroup, String cosmosDbName) {

        String [] dateTimes = getDateTimes() ;

        String url=  "/subscriptions/"+subscriptionId+"/resourceGroups/"+resourceGroup +
                "/providers/Microsoft.DocumentDb/databaseAccounts/"+cosmosDbName +
                "/metrics?api-version=2015-04-08" +
                "&$filter=(name.value eq 'Mongo Query Request Rate' and "+
                "startTime eq "+dateTimes[0]+"Z and endTime eq "+dateTimes[1]+"Z  and timeGrain eq duration'PT5M')";

        //System.out.println(url);

        webClient = WebClient.builder().baseUrl("https://management.azure.com")             
                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).build();

        return webClient.get().uri(url)         
                .header("Authorization", "Bearer "+token)
                .exchange()
                .flatMap(resp -> resp.bodyToMono(DataVO.class));                   
    }

Другие вопросы по теме