springboot接口GBK中文乱码解决不同接口使用不同字符集

问题:

发布一个新的接口,接口的字符集是GBK,发布生产后接收的中文一直乱码。其它接口字符集是UTF-8。需要应用支持多字符集。

原因:

springboot处理http requests请求统一默认字符集为UTF-8。

 解决思路:

 继续阅读源码CharacterEncodingFilter过滤器的doFilterInternal方法可以发现,isForceRequestEncoding()默认为true,所以如果没有设置,始终都会强制将requests请求的字符集设置为UTF-8。所以需要我们增加配置将强制设置字符集关闭 spring.http.encoding.force = false  增加配置后如果请求方没有设置字符集就会默认使用UTF-8,如果请求方设置了字符集就使用请求方的字符集,这样就可以实现不同接口使用不同的字符集的需求。

 最后:

在排查问题过程中为了更好了解乱码,下面这张图很有用。

 

Spring Boot 中,可以通过配置 Druid 数据源的 `connectionProperties` 参数来将 Oracle 数据库连接的字符集设置为 GBK。具体操作如下: 1. 在 `application.properties` 文件中添加以下 Druid 数据源的配置: ``` spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver spring.datasource.url=jdbc:oracle:thin:@//localhost:1521/orcl spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.druid.connectionProperties=useUnicode=true;characterEncoding=gbk ``` 其中 `useUnicode=true` 表示使用 Unicode 字符集,`characterEncoding=gbk` 表示将字符集设置为 GBK。 2. 在 `pom.xml` 文件中添加以下 Maven 依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.6</version> </dependency> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.3.0.0</version> </dependency> ``` 其中 `druid-spring-boot-starter` 是 Druid 在 Spring Boot 中的启动器,`ojdbc8` 是 Oracle 数据库的 JDBC 驱动。 3. 在代码中使用 Druid 数据源进行数据库操作,例如: ```java @Autowired private DataSource dataSource; public void query() throws SQLException { Connection conn = dataSource.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM your_table_name"); while (rs.next()) { String name = rs.getString("name"); // ... } rs.close(); stmt.close(); conn.close(); } ``` 这样就可以将 Oracle 数据库连接的字符集设置为 GBK使用 Druid 数据源进行数据库操作了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wyl90116

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值