gpt4 book ai didi

java - 使用 Spring RestTemplate 进行 POST 时获取 400 BAD 请求

转载 作者:搜寻专家 更新时间:2023-11-01 03:07:35 26 4
gpt4 key购买 nike

有人可以帮我弄清楚下面的代码有什么问题吗?

我正在使用 Spring 3.1.1 RestTemplate 尝试调用 Box.com 上的 REST WS 以从刷新 token 中获取新的访问 token 。

下面的代码返回一个 400 (BAD REQUEST)。我能够使用 FireFox POST 插件成功调用相同的方法。我比较了 FormHttpMessageConverter 类writeForm 方法 的输出,它与我从 FireFox 发送的完全一样。

有没有人有什么想法?

public static void main(String[] args) throws InterruptedException {
try {
String apiUrl = "https://www.box.com/api/oauth2/token";
String clientSecret = "[MY SECRET]";
String clientId = "[MY ID]";
String currentRefreshToken = "[MY CURRENT VALID REFRESHTOKEN]";

RestTemplate restTemplate = new RestTemplate();

List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();

messageConverters.add(new FormHttpMessageConverter());
restTemplate.setMessageConverters(messageConverters);

MultiValueMap<String, String> body = new LinkedMultiValueMap<String, String>();

body.add("grant_type", "refresh_token");
body.add("refresh_token", currentRefreshToken);
body.add("client_id", clientId);
body.add("client_secret", clientSecret);

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
headers.add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json");
headers.add("Accept-Encoding", "gzip, deflate");


HttpEntity<?> entity = new HttpEntity<Object>(body, headers);

restTemplate.exchange(apiUrl, HttpMethod.POST, entity, String.class);
} catch (Exception ex) {
System.out.println("ex = " + ex.getMessage());
}
}
}

最佳答案

RestTemplate 的无参数构造函数使用java.net API 进行请求,不支持gzip 编码。但是,有一个接受 ClientHttpRequestFactory 的构造函数.您可以使用 HttpComponentsClientHttpRequestFactory实现,它使用 Apache HttpComponents HttpClient API 发出请求。这确实支持gzip 编码。因此,您可以在创建 RestTemplate 时执行以下操作(来自 Spring Docs):

HttpClient httpClient = HttpClientBuilder.create().build();
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);

关于java - 使用 Spring RestTemplate 进行 POST 时获取 400 BAD 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17177107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com