HTTPClient POST返回中文问号解决

踩坑经历

接上上次写的http post传递map后续,因其他情况需要将接口转移别处,所以就需要接口传递请求,也就是说A请求B,B再取请求C,C返回B,B再返回A,单次请求返回没问题,中间加了一个传递后就出现问题了

是的,中文返回成了问号,当时也是一脸懵逼

解决过程

首先检查http请求编码

没问题,ok,然后检查参数编码

传递没问题,接收转码

看到这基本上就想不出别的哪还有问题了,于是一点百度一顿尝试,最终解决方式

@PostMapping(value = "/code" , produces = "application/json;charset=utf-8")
@ResponseBody

注解RequestMapping中produces属性可以设置返回数据的类型以及编码,配合@ResponseBody使用

总的来说produces就两个作用:json格式化、防止中文乱码

HttpClient 发送 POST 请求时,有可能会遇到服务器返回 302 的情况。这种情况通常是因为服务器需要进行重定向,而 HttpClient 默认是不会自动进行重定向的。 解决这个问题的方法,可以通过设置 HttpClient 的 RedirectStrategy 属性来实现自动重定向。下面是一个示例代码: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); List<NameValuePair> params = new ArrayList<>(); params.add(new BasicNameValuePair("param1", "value1")); params.add(new BasicNameValuePair("param2", "value2")); httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8")); RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(60000) .setConnectTimeout(60000) .setRedirectsEnabled(true) // 允许自动重定向 .build(); httpPost.setConfig(requestConfig); CloseableHttpResponse httpResponse = httpClient.execute(httpPost); int statusCode = httpResponse.getStatusLine().getStatusCode(); if (statusCode == HttpStatus.SC_OK) { // 处理正常情况的响应结果 } else if (statusCode == HttpStatus.SC_MOVED_TEMPORARILY || statusCode == HttpStatus.SC_MOVED_PERMANENTLY) { // 处理重定向情况 String redirectUrl = httpResponse.getFirstHeader("Location").getValue(); // 重新发送请求,并处理响应结果 // ... } ``` 在上面的代码中,我们通过设置 RequestConfig 的 setRedirectsEnabled(true) 来允许自动重定向。当服务器返回 302 状态码时,我们可以从响应头中获取重定向的 URL,然后重新发送请求并处理响应结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值