从RestTemplate java中调用azure logic app的请求触发器url。

问题描述 投票:0回答:1

我有一个带有请求触发器的 Azure 逻辑应用程序。我想从我的java应用中触发这个逻辑应用。所以,我试图从我的java API调用请求触发的网址。

它是工作正常,如果我使用DefaultHttpClient,但得到401上调用它使用RestTemplate在java。

DefaultHttpClient代码。

try {
    DefaultHttpClient httpClient = new DefaultHttpClient();

    HttpGet getRequest = new HttpGet(
        "{url of azure logic app trigger}");

    //StringEntity input = new StringEntity("{\"qty\":100,\"name\":\"iPad 4\"}");
    //input.setContentType("application/json");
    //postRequest.setEntity(input);

    HttpResponse response = httpClient.execute(getRequest);

    BufferedReader br = new BufferedReader(
                    new InputStreamReader((response.getEntity().getContent())));

    String output;
    System.out.println("Output from Server .... \n");
    while ((output = br.readLine()) != null) {
        System.out.println(output);
    }


    httpClient.getConnectionManager().shutdown();
    return("Success");
} catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return("Error");
} catch (UnsupportedOperationException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return("Error");
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    return("Error");
}

RestTemplate代码

@Service
public class SampleService {
@Autowired HttpClientService<String, String> httpClientService;
public String callURL() {
ResponseErrorHandler responseErrorHandler = new ResponseErrorHandler() {

    @Override
    public boolean hasError(ClientHttpResponse response) throws IOException {
        System.out.print(response.toString());
        return false;
    }

    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        // TODO Auto-generated method stub
    }
};
UriComponentsBuilder builder = UriComponentsBuilder
        .fromUriString("{logic app url}")
        // Add query parameter
        .queryParam("api-version", {api-version})
        .queryParam("sp", {sp})
        .queryParam("sv", {sv})
        .queryParam("sig",{sig});

RequestDetailsDAO requestDetails = new RequestDetailsDAO(builder.build().toUri().toString(), HttpMethod.GET);
String response = httpClientService.execute(requestDetails, null, responseErrorHandler, String.class);
return response.toString();

HttpClientService.java

@Service
public class HttpClientService<T, V>  {
public RestTemplate restTemplate;

public HttpClientService(RestTemplateBuilder restTemplateBuilder) {
    this.restTemplate = restTemplateBuilder.setConnectTimeout(Duration.ofSeconds(5)).setReadTimeout(Duration.ofSeconds(5)).build();
}

public V execute(RequestDetailsDAO requestDetails, HttpEntity<T> entity, ResponseErrorHandler errorHandler,
                 Class<V> genericClass) {

    restTemplate.setErrorHandler(errorHandler);

    ResponseEntity<V> response = restTemplate.exchange(requestDetails.getUrl(), requestDetails.getRequestType(), entity, genericClass);
    return response.getBody();
}
}

RequestDetailsDAO.java

public class RequestDetailsDAO {
private String url;
private HttpMethod requestType;

public RequestDetailsDAO(String url, HttpMethod requestTyp) {
    super();
    this.url = url;
    this.requestType = requestTyp;
}
public String getUrl() {
    return url;
}
public void setUrl(String url) {
    this.url = url;
}
public HttpMethod getRequestType() {
    return requestType;
}
public void setRequestType(HttpMethod requestType) {
    this.requestType = requestType;
}

@Override
public String toString() {
    return "RequestDetails [url=" + url + ", requestType=" + requestType + "]";
}
}
java azure spring-boot resttemplate azure-logic-apps
1个回答
0
投票

请尝试用简单的独立代码与RestTemplate和检查。我提供下面的小片段。

try {
    ResponseEntity<ResponseVO> response = restTemplate.exchange({uri of azure logic app trigger}, HttpMethod.GET, request, ResponseVO.class);
} catch (HttpStatusCodeException ex) {
    int statusCode = ex.getStatusCode().value();
    System.out.println("Status Code :"+statusCode);
    ResponseEntity<?> resEntity = ResponseEntity.status(ex.getRawStatusCode()).headers(ex.getResponseHeaders())
                .body(ex.getResponseBodyAsString())
}

在这里,我提供了下面的小片段。ResponseVO.class 是要映射到对象的Response,在这种情况下,你可以设置自己的类。在这个捕捉块中,你可以找到异常的细节。

© www.soinside.com 2019 - 2024. All rights reserved.