发生原因
在腾讯云部署有两个服务器,之前请求是合适的。因业务需求打算将两个服务的请求方式修改为内网请求。所以就有了 使用 RestTemplate 发生请求返回 400的错误。代码如下
下面展示一些 内联代码片
。
import org.springframework.web.client.RestTemplate;
@Autowired
RestTemplate restTemplate;
// 方法中使用 之前以为是 utf8乱码导致所以进行了编码定义
restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));
HttpHeaders headers = new HttpHeaders();
headers.set("Accept-Charset", "UTF-8");
HttpEntity<String> entity = new HttpEntity<>(headers);
String url ="127.0.0.1:/wx/aa?can=你好"
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
responseBody = response.getBody();
System.out.println("------返回信息:"+responseBody);
如此以上代码会偶发报错 返回400
内网中调用的服务是C#编写。
经后面仔细琢磨后。
原因 是url请求地址中 所带的参数中有汉字导致。包括特殊符号。需要对所带参数部分进行URL编码后进行请求。
一下方法是用来判断参数是否进行了编码,未编码则进行编码
下面展示一些 内联代码片
。
// 判断是否进行了url编码未编码进行编码输出,进行了编码则不用处理
public String urlCode(String input) throws UnsupportedEncodingException {
String decodedInput = URLDecoder.decode(input, "UTF-8");
if (input.equals(decodedInput)) {
System.out.println("字段:"+input+"未进行了 URL 编码,需处理");
input = URLEncoder.encode(input, "UTF-8");
System.out.println("编码后的字段: " + input);
} else {
System.out.println("字段"+input+"进行了 URL 编码,无需处理");
}
return input;
}
另一种请求发送方式
import com.wwjswly.common.util.HttpUtils;
String url ="127.0.0.1:/wx/aa?can=你好"
byte[] bytes = HttpUtils.doGet(url);
responseString = new String(bytes, StandardCharsets.UTF_8);
System.out.println("-----返回信息:"+responseString);
同样也存在url请求中存在汉字,这里发送回直接报错。
另外这次是接收请求的服务是使用c#编写,不知道是不是其中原因,必须要url编码后才能正确接收到参数。
另外作为游戏爱好者 开发了两款微信小游戏,供大家玩耍。
《3d决对》
《酒馆卡牌》