隐藏

Springboot项目中文乱码解决(源码案例)

发布:2022/3/17 14:40:14作者:管理员 来源:本站 浏览次数:1847

使用idea搭建了一个springboot项目,版本号为1.5.22.ELEASE,只选择了spring-boot-starter-web依赖,自己编写controller之后,返回中文却乱码了,controller源码如下:

@RestController class TestController { @GetMapping("test") String test() { "测试乱码111111abc" } }

测试后返回结果如下:

%title插图%num
springboot项目中文乱码

原因很明显,可以从上图中看出来:http响应的编码格式不对,设置为utf-8即可。

在网上找到的方式,大都是设置以下两个配置,然而并没有用:

spring: http: encoding: charset: utf-8 force: true
%title插图%num

乱码原因分析解决

http响应头中的编码为 charset=ISO-8859-1,我们需要改变为UTF-8,所以我们可以通过在controller中设置响应编码的方式解决,controller源码可改为如下:

@RestController @RequestMapping(produces = "application/json;charset=UTF-8") class TestController { @GetMapping("test") String test() { "测试乱码111111abc" } }

最终解决了乱码问题,请求响应如下图:

%title插图%num

返回的charset也变成了UTF-8。不过这只是解决了这一个请求的乱码问题。

Springboot项目乱码统一解决办法

此外,如果已经有较多的controller,这样设置很不方便。还可以通过添加一个StringHttpMessageConverter的方式,统一设置,源码如下:

package com.jvm123.api.config /**
 *
 * @author yawn < http://jvm123.com >
 *
 */ @Configuration @EnableWebMvc class MvcConfig extends WebMvcConfigurerAdapter { @Override void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(new StringHttpMessageConverter(StandardCharsets.UTF_8)) super.configureMessageConverters(converters) } }

设置后的请求结果如下:

%title插图%num

这样就统一解决了springboot项目中的中文乱码问题。