首页 > 解决方案 > 如何在 Spring Boot 框架中发送 HTTP 请求?

问题描述

我想将带有 JSON 对象的 POST 请求发送到指定的 URL,但它总是失败。

我已经检查了每一个数据以确保它们是正确的,但是当我发送它们时,它们似乎被更改了,因此目标服务器无法正确处理我的请求。

 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 参数的格式: name: appid type: INT 但是一个 17 位数字的 int 完全超出了范围。

响应:{"error_code":"52003","error_msg":"UNAUTHORIZED USER"}

标签: javaspring-boot

解决方案


JSONObject 将接受 object 类型的值,因此您可以将 appId 值转换为 long 或远程 http 调用中接受的任何其他数据类型。


推荐阅读