通过 Spring RestTemplate PUT 方法到达我的 Apigee 代理时出现问题

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

在将 API 调用从旧 Web 应用程序从我们之前的 API 管理迁移到 Apigee(GCP API 管理工具)时,我遇到了一个奇怪的问题。我什至不确定我尝试调用 Apigee 的事实本身就是一个问题,但为了完整起见我仍然提及它。

这是 RestTemplate 的配置方式

@Bean
public RestTemplatemyRestTemplate(
        RestTemplateBuilder restTemplateBuilder,
        @Value("${application.my.url}") String myUrl,
        Supplier<ClientHttpRequestFactory> bufferingClientHttpRequestFactorySupplier,
        OAuth2TokenService oAuth2TokenService
) {
    return restTemplateBuilder
            .rootUri(myUrl)
            .requestFactory(bufferingClientHttpRequestFactorySupplier)
            .interceptors(new AuthorizationHeaderInterceptor(oAuth2TokenService)) // Oauth2 mechanism that is working well
            .build();
}

现在这是 API 调用完成的地方

public void createOrUpdateCustomerSource(Customer myCustomer, final HttpHeaders headers) throws TechnicalException {
    final HttpEntity<Customer> httpEntity = new HttpEntity<>(myCustomer, headers);

    final String myId = "dummyId";

    final String uri = UriComponentsBuilder
            .newInstance()
            .pathSegment("some-path", myId))
            .build().toString();

    try {
        log.info("Sending PUT request for customer Id: {} at {}", myId, uri);

        myRestTemplate.exchange(uri, HttpMethod.PUT, httpEntity, Void.class);

    } catch (RestClientException e) {
        // exception handling
    }
}

我想说这是非常基本的,但由于某种原因我从其余模板中得到了这个输出:

org.springframework.web.client.HttpClientErrorException$NotFound:404未找到:[无正文]

除了检索授权令牌的调用之外,没有任何内容到达 Apigee。显然,我尝试复制粘贴 Postman 上 RestTemplate 使用的完全相同的 URL,效果很好,因为我可以使用 Apigee 进行监控。

我需要添加的最后一件事是,如果我像这样调用我的 API(没有任何主体或标头): myRestTemplate.exchange(uri, HttpMethod.PUT, null, Void.class); 它确实到达了 Apigee,这让我认为我执行 PUT 的方式是错误的,而且我不知道为什么。

java spring resttemplate apigee
© www.soinside.com 2019 - 2024. All rights reserved.