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

标签:

本文出自jvm123.com-java技术分享站:http://jvm123.com/2019/10/springboot-xiang-mu.html

Springboot项目中中文乱码案例

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

@RestController
class TestController {

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

测试后返回结果如下:

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

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

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

spring:
  http:
    encoding:
      charset: utf-8
      force: true
Springboot项目中文乱码解决(源码案例)插图(1)

乱码原因分析解决

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

@RestController
@RequestMapping(produces = "application/json;charset=UTF-8")
class TestController {

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

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

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

返回的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)
    }
}

设置后的请求结果如下:

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

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

发表评论