java - 将 curl 命令转换为 RestTemplate
问题描述
我有以下卷曲表达式:
curl --data 'api_key=API_Key' --data-urlencode 'event=[{"user_id":"12345", "event_type":"buy_song"}]' https://someapi
应该将其转换为 RestTemplate.postForEntity 调用。我这样转换:
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
params.add("api_key", "API_Key");
params.add("event", URLEncoder.encode(objectMapper.writeValueAsString(Collections.singletonList(e)), "UTF-8"));
// send
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);
ResponseEntity<String> response = restTemplate.postForEntity("https://someapi", request, String.class);
服务器返回400 错误请求
我确认杰克逊的 objectmapper 正确地序列化了对象objectMapper.writeValueAsString(Collections.singletonList(e))
我怀疑我无法正确处理RestTemplate 中示例 curl 的混合--data
。--data-urlencode
你能建议我做错什么吗?
解决方案
// org.apache.commons.collections.map.HashedMap
HashedMap requestBody = new HashedMap();
requestBody.put("api_key", "API_Key");
requestBody.put("event", URLEncoder.encode(objectMapper.writeValueAsString(Collections.singletonList(e)), "UTF-8"));
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
String jsonBody = new ObjectMapper().writeValueAsString(requestBody);
HttpEntity<String> entity = new HttpEntity<>(jsonBody, headers);
ResponseEntity<String> response = restTemplate.postForEntity("https://someapi", entity, String.class);
推荐阅读
- html - 如何让我所有的星星向左悬停一倾斜?
- javascript - window.onbeforeunload 事件提前执行?
- angular - Azure Pipeline“ChromeHeadless 在 60000 毫秒内没有捕获,正在杀死。”,在第二次尝试时工作,但有时以非零退出
- javascript - JavaScript 中公共字段声明的意义何在?
- reactjs - refetchIntervalInBackground 不会停止使用 refetchInterval 的查询在后台重新获取
- f# - F#内联方法调用减少指令
- python - Tensorflow / Keras sigmoid 在密集层的单个输出上
- python - Python:当前蜡烛完成时从 Binance 获取数据 -
- sql - 运行总和,不包括具有重复列值的行
- xamarin - Xamarin 表单可以在 ContentPage 上绘制 ContentPage?