Java HTTP接口返回数据乱码

本文讲述了在使用Hutool HttpUtil发起GET请求时,由于默认设置的Accept-Encoding导致接收非GZIP数据出现乱码的问题。通过调整请求头并去掉gzip设置,解决了返回结果的编码问题,确保了正确显示中文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题场景

使用hutool工具类发起get请求,代码如下

String res = HttpUtil.get(url);

实际返回结果没有中文,但还是显示乱码,如下
在这里插入图片描述

问题分析

结合这篇文章给的思路(关于Http请求后返回json乱码的问题),并结合源码,发现HttpUtil默认会给请求头加上

Accept-Encoding: gzip, deflate

设置代码如下在这里插入图片描述导致hutool后续处理时,使用GZIP流解析响应结果
在这里插入图片描述

而服务端可能并不是GZIP方式返回的数据。

问题解决

去掉请求头的Accept-Encoding: gzip设置

HttpResponse result = HttpRequest.get(url)
                        .header(Header.ACCEPT_ENCODING, "deflate")
                        .execute();

最终返回结果正常了。

### Java接口返回数据示例 对于Java接口返回数据,通常会采用JSON格式来传输对象。下面是一个简单的例子展示如何构建并返回一个包含中文字符的对象。 #### 定义实体类 首先创建一个用于封装响应信息的实体类 `ResponseEntity`: ```java @Data public class ResponseEntity implements Serializable { private static final long serialVersionUID = 1L; /** 状态码 */ private int code; /** 提示消息 */ private String message; /** 数据体 */ private Object data; } ``` 当需要返回带有特定业务逻辑的结果时,则可以实例化此对象并将所需的信息填充进去[^1]。 #### 控制器方法实现 接着,在Spring Boot控制器中编写相应的方法以处理HTTP请求并向客户端发送响应: ```java @RestController @RequestMapping("/api") public class ExampleController { @GetMapping("/example") public ResponseEntity getExample() { // 创建实体对象并设置属性值 SupplyFeaturesVo supplyFeaturesVo = new SupplyFeaturesVo(); supplyFeaturesVo.setHouseType("公寓"); supplyFeaturesVo.setRoomType("一室一厅"); supplyFeaturesVo.setAcg("89平方米"); supplyFeaturesVo.setAvg("每平米5000元"); supplyFeaturesVo.setNum("共出售了3套"); // 构建返回结果 return ResponseEntity.builder() .code(200) .message("成功获取房源特征") .data(supplyFeaturesVo) .build(); } } ``` 这段代码展示了如何通过GET方式访问 `/api/example` 接口,并返回一个包含了房屋特性的 JSON 对象给调用者[^2]。 ### 解决中文乱码问题 如果遇到Java接口返回中文字乱码的情况,这通常是由于编码配置不一致所引起的。确保服务器端和客户端都使用相同的字符集非常重要。以下是几种可能的解决方案: - **调整Tomcat连接器参数**:可以在应用服务器(如Apache Tomcat)中的server.xml文件里修改Connector标签下的URIEncoding属性为UTF-8。 - **设置HttpServletResponse的内容类型**:在Servlet或Spring MVC Controller内显式指定Content-Type头部字段为application/json;charset=UTF-8。 - **检查前端页面meta声明**:<head>部分应含有<meta charset="utf-8">这样的语句,保证浏览器能够正确解析接收到的内容。 以上措施有助于防止因编码差异而导致的显示异常现象发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值