[英]azure logic app request trigger url is not working from RestTemplate java but working in postman
I have Azure logic app with request trigger.我有带有请求触发器的 Azure 逻辑应用程序。 I want to trigger this logic app from my java application.
我想从我的 java 应用程序触发这个逻辑应用程序。 So, I am trying to call the request trigger url from my java API.
所以,我试图从我的 java API 调用请求触发器 url。
It is working fine if i am hitting in postman, logic app with request trigger hitting via postman如果我输入 postman,它工作正常,逻辑应用程序通过 postman 触发请求触发
but getting 401 on calling it using RestTemplate in java.但是在 java 中使用 RestTemplate 调用它时得到 401。
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;
}
}
logic app with request trigger accessing via rest template带有请求触发器的逻辑应用程序通过 rest 模板访问
As per Hury Shen suggestion i changed api code as below,根据 Hury Shen 的建议,我将 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;
}
For this problem, we should put the value of api-version
, sp
, sv
and sig
in query parameters instead of put them in headers.对于这个问题,我们应该将
api-version
、 sp
、 sv
和sig
的值放在查询参数中,而不是放在 headers 中。
Do it like this:像这样做:
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);
I have Azure logic app with request trigger.我有带有请求触发器的 Azure 逻辑应用程序。 I want to trigger this logic app from my java application.
我想从我的 java 应用程序中触发这个逻辑应用程序。 So, I am trying to call the request trigger url from my java API.
所以,我试图从我的 java API 调用请求触发器 url。
It is working fine if i am hitting in postman, logic app with request trigger hitting via postman如果我在 postman 中运行,它工作正常,请求触发器通过 postman 命中的逻辑应用程序
but getting 401 on calling it using RestTemplate in java.但是在 java 中使用 RestTemplate 调用它时得到 401。
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;
}
}
logic app with request trigger accessing via rest template通过 rest 模板访问请求触发器的逻辑应用
As per Hury Shen suggestion i changed api code as below,根据 Hury Shen 的建议,我将 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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.