如何在 Spring Boot 框架中发送 HTTP 请求?
Posted
技术标签:
【中文标题】如何在 Spring Boot 框架中发送 HTTP 请求?【英文标题】:How to send a HTTP request in Spring boot framework? 【发布时间】:2019-07-07 05:07:12 【问题描述】:我想向指定的 URL 发送一个带有 JSON 对象的 POST 请求,但总是失败。
我已经检查了每一个数据以确保它们是正确的,但是当我发送它们时,它们似乎被更改了,因此目标服务器无法正确处理我的请求。
public static String translate(String query, String from, String to)
JSONObject response = new JSONObject();
JSONObject request = new JSONObject();
//Generate a random number
int salt = getRandom();
//Generate the sign
String sign = encodeMD5Hex(APP_ID + query + salt + KEY);
//Put all parameters into the request
request.put("q", query);
request.put("from", from);
request.put("to", to);
request.put("appid", APP_ID);
request.put("salt", salt);
request.put("sign", sign);
return sendPOSTRequest(request);
private static String encodeMD5Hex(String data)
return DigestUtils.md5Hex(data);
private static int getRandom()
return (int) ((Math.random() + 1) * 10000);
private static String sendPOSTRequest(JSONObject data)
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<JSONObject> entity = new HttpEntity(data, headers);
String answer = restTemplate.postForObject(BAIDU_TRANS_API_URL, entity, String.class);
return answer;
我猜这可能是 appid 的错误。响应总是告诉我我的 appid 不正确,即使我 100% 确定它是正确的。这里是appid参数的格式: 名称:appid 类型:INT 但是 17 位数字的 int 完全超出范围。
回应: "error_code":"52003","error_msg":"未经授权的用户"
【问题讨论】:
请在您的问题中提供完整的答复(或例外)。 Call another rest api from my server in Spring-Boot的可能重复 你的APP_ID的数据类型是什么?如果它是 17 位数字,为什么不将它声明为 Long 而不是 Int。无论如何,JSON 对象只有 Number 作为数据类型,所以 Int 或 Long 它会走同样的路。 你应该让 Spring 注入正确配置的 RestTemplate,而不是为每个请求创建一个新的。 【参考方案1】:JSONObject 将接受 object 类型的值,因此您可以将 appId 值转换为 long 或远程 http 调用中接受的任何其他数据类型。
【讨论】:
以上是关于如何在 Spring Boot 框架中发送 HTTP 请求?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Angular 2 与 Spring Boot 应用程序连接起来?
如何在 spring-boot Web 客户端中发送请求正文?