URL-адрес триггера запроса приложения azure logic не работает из RestTemplate java, но работает в почтальоне

У меня есть приложение логики Azure с триггером запроса. Я хочу запустить это приложение логики из своего Java-приложения. Итак, я пытаюсь вызвать URL-адрес триггера запроса из моего Java API.

Он работает нормально, если я нажимаю на почтальона, приложение логики с срабатыванием триггера запроса через почтальона

но получение 401 при вызове с помощью RestTemplate в java.

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

@RestController
public class SampleController {
    @RequestMapping(value = "/display",method = RequestMethod.GET)
    public ResponseEntity<String> display()
    {
        System.out.println("entered");
        RestTemplate restTemplate = new RestTemplate();
        String url = "https://pt-38.northeurope.logic.azure.com/workflows/cc0363a3bf134efca43b0bd2d15d5ed5/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=HnllGcN9xo91kRGAjk";

        HttpHeaders headers = new HttpHeaders();
        headers.set("api-version", "2016-10-01");
        headers.set("sp", "%2Ftriggers%2Fmanual%2Frun");
        headers.set("sv", "1.0");
        headers.set("sig", "HnllGcN9xo91kRGAjk3Zlp6fW0dhwf");
        HttpEntity request = new HttpEntity(headers);
        ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, request, String.class);
//        JSONObject obj = new JSONObject(response.getBody());
//        System.out.println("obj");
        return response;
    }
}

приложение логики с доступом к триггеру запроса через шаблон отдыха

В соответствии с предложением Хьюри Шена я изменил код API, как показано ниже,

public HttpEntity<String> display1()
    {
        System.out.println("entered");
        RestTemplate restTemplate = new RestTemplate();
        String url = "https://prod-38.northeurope.logic.azure.com/workflows/cc0363a3bf134efca43b0bd2d15d5ed5/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=HnllGcN9xo91kRGAjk3Zlp6fW0dhwfaRij-fk1CC60c";
        HttpHeaders headers = new HttpHeaders();
        headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
        UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
                .queryParam("api-version", "2016-10-01")
                .queryParam("sp", "%2Ftriggers%2Fmanual%2Frun")
                .queryParam("sv", "1.0")
                .queryParam("sig", "HnllGcN9xo91kRGAjk3Zlp6fW0dhwfaRij-fk1CC60c");
        HttpEntity<?> entity = new HttpEntity<>(headers);
        HttpEntity<String> response = restTemplate.exchange(
                builder.toUriString(),
                HttpMethod.GET,
                entity,
                String.class);
        return response;
    }

Попадая ниже исключения, URL-адрес триггера запроса приложения azure logic не работает из RestTemplate java, но работает в почтальоне

Пожалуйста, обратитесь к решению, которое я предоставил ниже. Если это поможет вашей проблеме, пожалуйста, прими это как ответ (нажмите на галочку рядом с моим ответом, чтобы переключить его с серого на заполненный). Заранее спасибо ~

Hury Shen 30.03.2021 05:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Для этой проблемы мы должны указать значения api-version, sp, sv и sig в параметрах запроса, а не помещать их в заголовки.

Сделай это так:

Map<String, String> params = new HashMap<String, String>();
params.put("api-version", "xxxx");
params.put("sp", "xxxxx");
params.put("sv", "xxx");
params.put("sig", "xxxxxxx");
.....
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, request, String.class, params);

Я добавил последний результат после изменения api в соответствии с вашим предложением.

gan thota 30.03.2021 07:45

Привет @ganthota Поскольку вы добавили параметры в код, пожалуйста, измените url с String url = "https://prod-38.northeurope.logic.azure.com/workflows/cc036‌​3a3bf134efca43b0bd2d‌​15d5ed5/triggers/man‌​ual/paths/invoke?api‌​-version=2016-10-01&‌​sp=%2Ftriggers%2Fman‌​ual%2Frun&sv=1.0&sig‌​=HnllGcN9xo91kRGAjk3‌​Zlp6fW0dhwfaRij-fk1C‌​C60c"; на String url = "https://prod-38.northeurope.logic.azure.com/workflows/cc036‌​3a3bf134efca43b0bd2d‌​15d5ed5/triggers/man‌​ual/paths/invoke"; в своем коде.

Hury Shen 30.03.2021 08:41

Я изменил URL-адрес, поскольку вы предложили получить ошибку ниже: "сообщение": "401 Неавторизованный: [{\" ошибка \ ": {\" код \ ": \" Авторизация не удалась \ ", \" сообщение \ ": \" ‌ У вас нет прав на выполнение действия "запустить" в области "/ триггеры / руководство / пути / вызов /". Убедитесь, что вы отправляете запрос с помощью соответствующего метода HTTP. Подробнее см. aka.ms/logic-trigger. \ "}}]",

gan thota 30.03.2021 10:16

@ganthota Пожалуйста, измените код с .queryParam("sp", "%2Ftriggers%2Fmanual%2Frun") на .queryParam("sp", "/triggers/manual/run")

Hury Shen 30.03.2021 10:38

Вы должны защитить свое приложение Logic с помощью токена AAD или управляемого удостоверения.

Вставка URL-адреса в браузере:

[{"ruCode":"00","ruName":"RETAIL UNIT, CHINA","ruNameShort":"CHINA","ruCategory":"Physical","insDate":"2020-08-11 12:13:00","updDate":"2020-08-12 12:13:00"},{"ruCode":"FF","ruName":"FF","ruNameShort":"FF","ruCategory":"FFF","insDate":"2020-09-01 22:00:00","updDate":"2020-09-01 22:00:00"},{"ruCode":"IK","ruName":"Retail Unit, IKEA","ruNameShort":"IK","ruCategory":"Physical","insDate":"2020-09-03 22:00:00","updDate":"2020-09-03 22:00:00"},{"ruCode":"TestRU","ruName":"TestRU","ruNameShort":"TR","ruCategory":"Physical","insDate":"2021-03-29 10:58:52","updDate":"2021-03-29 10:58:56"},{"ruCode":"CN","ruName":"RETAIL UNIT, CHINA","ruNameShort":"CHINA","ruCategory":"Physical","insDate":"2020-08-13 11:25:09","updDate":"2020-08-13 11:25:09"},{"ruCode":"AU","ruName":"RETAIL UNIT, AU","ruNameShort":"AUSTRALIA","ruCategory":"Physical","insDate":"2020-08-09 11:25:09","updDate":"2020-08-09 11:25:09"},{"ruCode":"FR","ruName":"RETAIL UNIT, FR","ruNameShort":"FRANCE","ruCategory":"Physical","insDate":"2020-08-13 11:25:09","updDate":"2020-08-13 11:25:09"},{"ruCode":"AU","ruName":"RETAIL UNIT, AU","ruNameShort":"AUSTRALIA","ruCategory":"Physical","insDate":"2020-08-09 11:25:09","updDate":"2020-08-09 11:25:09"},{"ruCode":"GG","ruName":"GG","ruNameShort":"GG","ruCategory":"GG","insDate":"2020-08-06 22:00:00","updDate":"2020-08-06 22:00:00"},{"ruCode":"NN","ruName":"RETAIL UNIT, NN","ruNameShort":"NN","ruCategory":"Physical","insDate":"2020-09-09 22:00:00","updDate":"2020-09-09 22:00:00"},{"ruCode":"QQ","ruName":"Retail Unit QQ","ruNameShort":"QQ","ruCategory":"Physical","insDate":"2020-09-10 22:00:00","updDate":"2020-09-10 22:00:00"},{"ruCode":"WW","ruName":"Retail Unit WW","ruNameShort":"WW","ruCategory":"Physical","insDate":"2020-09-09 22:00:00","updDate":"2020-09-09 22:00:00"},{"ruCode":"ZZ","ruName":"RetailUnit ZZ","ruNameShort":"ZZ","ruCategory":"Physical","insDate":"2020-09-10 22:00:00","updDate":"2020-09-10 22:00:00"},{"ruCode":"ZZZ","ruName":"Retail Unit ZZZ","ruNameShort":"ZZZ","ruCategory":"Physical","insDate":"2020-09-10 22:00:00","updDate":"2020-09-10 22:00:00"},{"ruCode":"AAA","ruName":"Retail Unit AAA","ruNameShort":"AAAA","ruCategory":"Physical","insDate":"2020-09-10 22:00:00","updDate":"2020-09-10 22:00:00"},{"ruCode":"LLL","ruName":"Retail Unit LLL","ruNameShort":"LLL","ruCategory":"Physical","insDate":"2020-09-06 22:00:00","updDate":"2020-09-06 22:00:00"}]

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