[英]curl request - changed to RestTemplate - No Body Error
我有一個 curl 命令,它工作正常,但是當我在 RestTemplate 中嘗試它時,我遇到了錯誤。
Curl:
curl -X POST "https://api.example.com/v1/tokens/accessToken" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"refresh_token\": \"eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCIsIng1dCI6IndKZlQ2NHpqemQxWk4yS1duX3FYSmpvOHByMCIsImtpZCI6Im9yYWtleSJ9.eyJzdWIiOm51bGwsIm9yYWNsZS5vYXV0aC51c2VyX29yaWdpbl9pZF90eXBlIjoiTERBUF9VSUQiLCJvcmFjbGUub2F1dGgudXNlcl9vcmlnaW5faWQiOiJQUk9BQ1QyMDE5ISIsImlzcyI6Ind3dy5vcmFjbGUuZXhhbXBsZS5jb20iLCJvcmFjbGUub2F1dGgucnQudHRjIjoicmVzb3VyY2VfYWNjZXNzX3RrIiwib3JhY2xlLm9hdXRoLnN2Y19wX24iOiJPQXV0aFNlcnZpY2VQcm9maWxlIiwiaWF0IjoxNTk1MjM3NDk0LCJvcmFjbGUub2F1dGgudGtfY29udGV4dCI6InJlZnJlc2hfdG9rZW4iLCJleHAiOjE1OTU4NDIyOTQsInBybiI6bnVsbCwianRpIjoiN2I0YzExZDAtNjRkZi00YjhkLWJkZTYtNmM2ODdkZTY4MDI2Iiwib3JhY2xlLm9hdXRoLnNjb3BlIjoiQXN1cFVzZXJQcm9maWxlLm1lIiwib3JhY2xlLm9hdXRoLmNsaWVudF9vcmlnaW5faWQiOiJNeUFzdXBBUEkiLCJ1c2VyLnRlbmFudC5uYW1lIjoiRGVmYXVsdERvbWFpbiIsIm9yYWNsZS5vYXV0aC5pZF9kX2lkIjoiMTIzNDU2NzgtMTIzNC0xMjM0LTEyMzQtMTIzNDU2Nzg5MDEyIn0.UjJKgHkCypoyIsK7-24vUdX4jT2vkODW56tfwNuAnFqvaS712ZdDAQFiu5wjS9sCajAx0LDoJXQoq5ThVliY71FU9cvwS80SRpXzEIX_TcnnOfNXyZBzTyCqKDPjin0ajZ9Jvc_LNbMMD15i0tN3U6IQHmahm8yikGL7lBtvT30\"}"
Spring Rest 模板
restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));
Map<String, Object> map = new HashMap<>();
map.put("body", "{\"refresh_token\": \"eyJhbGciOiJSUzUxMiIsInR5cCI6IkpXVCIsIng1dCI6IndKZlQ2NHpqemQxWk4yS1duX3FYSmpvOHByMCIsImtpZCI6Im9yYWtleSJ9.eyJzdWIiOm51bGwsIm9yYWNsZS5vYXV0aC51c2VyX29yaWdpbl9pZF90eXBlIjoiTERBUF9VSUQiLCJvcmFjbGUub2F1dGgudXNlcl9vcmlnaW5faWQiOiJQUk9BQ1QyMDE5ISIsImlzcyI6Ind3dy5vcmFjbGUuZXhhbXBsZS5jb20iLCJvcmFjbGUub2F1dGgucnQudHRjIjoicmVzb3VyY2VfYWNjZXNzX3RrIiwib3JhY2xlLm9hdXRoLnN2Y19wX24iOiJPQXV0aFNlcnZpY2VQcm9maWxlIiwiaWF0IjoxNTk1MjM4Njc4LCJvcmFjbGUub2F1dGgudGtfY29udGV4dCI6InJlZnJlc2hfdG9rZW4iLCJleHAiOjE1OTU4NDM0NzgsInBybiI6bnVsbCwianRpIjoiMDZiYWE1MjgtMTZmOC00MzU1LWE3ZmYtNDc3ZjA4ZTNmMGU1Iiwib3JhY2xlLm9hdXRoLnNjb3BlIjoiQXN1cFVzZXJQcm9maWxlLm1lIiwib3JhY2xlLm9hdXRoLmNsaWVudF9vcmlnaW5faWQiOiJNeUFzdXBBUEkiLCJ1c2VyLnRlbmFudC5uYW1lIjoiRGVmYXVsdERvbWFpbiIsIm9yYWNsZS5vYXV0aC5pZF9kX2lkIjoiMTIzNDU2NzgtMTIzNC0xMjM0LTEyMzQtMTIzNDU2Nzg5MDEyIn0.UCkScWFn8d3pupwAxilT8T-m6Rf8fgZ8ge9OZvWZbZ-4eCVCPyHeI8A1a2QV0_iZhjwHaITNTzCZ4Eydfkm-mZuCa-PLY63HJhWLzTGlbaYsWRVtHaLF58F6spZ106T6T3ZDvQVIsiQ9845ruG_1ib0vKV_57X_CcVB4XZktYvA\"}");
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(map, headers);
String urlString = "https://api.example.com/v1/tokens/accessToken";
String response = restTemplate.postForObject(urlString, entity, String.class);
例外:
Caused by: org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Internal Server Error: [{"error":"Request Failed"}]
那么如何正確地將以上 curl 轉換為 RestTemplate 以避免服務器和無正文錯誤。 Curl 命令運行良好。
嘗試這個
restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.setAccept(singletonList(MediaType.APPLICATION_JSON));
HttpEntity<String> entity =
new HttpEntity<>("{\"refresh_token\": \"eyJhb...\"}", headers);
正如您正確注意到的那樣,您應該使用:
map.put("refresh_token", "eyJhbGci...".
但是你有 401 只是因為你傳遞了另一個令牌(檢查差異 cURL 與 java 代碼版本)
如果令牌具有類型,例如 Bearer,請檢查您的令牌,您必須這樣寫:
"Authorization": "Bearer rrdedzfdgf........."
並確保 Bearer 和 token 之間只有一個空格
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.