SpringBoot直接返回字符串中文乱码问题

问题

最近再写一个SpringBoot+Vue的前后端分离项目的时候,后端直接向前端返回字符串,结果前端前端接收之后中文就出现乱码:
使用postman测试如图:
乱码截图
后端代码:

@Slf4j
@RestController
@RequestMapping("/api/websites")
public class WebSitesController {
    @Value("${blog.websites.path}")
    private String websitesFilePath;

    @GetMapping("/get")
    public String get() {
        String content = FileUtil.readString(websitesFilePath, CharsetUtil.UTF_8);
        log.info("websites : {}", content);
        return content;
    }
}

解决方法

编码问题一开始就想到是注入HttpServletResponse对象,于是我将代码代码修改为如下:

@GetMapping("/get")
public String get(HttpServletResponse res) {
    String content = FileUtil.readString(websitesFilePath, CharsetUtil.UTF_8);
    res.setContentType("text/html;charset=utf-8");
    res.setCharacterEncoding("utf-8");
    log.info("websites : {}", content);
    return content;
}

但是仍然乱码,查询资料之后发现,在这里设置编码格式是无效的,可以用如下方式设置:

1. 使用produces参数

GetMapping注解上使用produces参数设置编码格式
使用produce参数再次测试,乱码问题解决。

2. 封装Map

想到如果将想要返回的数据封装成对象之后,再结合@ResponseBody注解就不会出现乱码,于是尝试将数据封装成Map:

@GetMapping("/get")
public Map<String, String> get() {
    String content = FileUtil.readString(websitesFilePath, CharsetUtil.UTF_8);
    log.info("websites : {}", content);
    return MapUtil.of("content", content);
}

完美解决:
返回结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值