如何在 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 请求?的主要内容,如果未能解决你的问题,请参考以下文章

禁用 Spring Boot Webclient 日志

如何在优雅地Spring 中实现消息的发送和消费

如何将 Angular 2 与 Spring Boot 应用程序连接起来?

如何在 spring-boot Web 客户端中发送请求正文?

002 spring boot框架,引入mybatis-generator插件,自动生成Mapper和Entity

一图看懂Spring Boot 异步框架