SpringMvc json中文变成?的解决办法 设置mvc编码

当前端发送ajax请求到后端获取商品数据时,发现商品名称中的中文显示为问号。问题定位在后端,尝试通过设置servletResponse编码未成功。解决方法包括在请求映射注解中添加字符编码,配置SpringMVC的StringHttpMessageConverter,或者实现WebMvcConfigurer并添加messageConverter。

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

场景描述:
前端发送ajax请求向后台查询商品数据,得到数据后将商品信息加入到页面中。

$.ajax({
                url: url,
                type: "get",
                data: dataObject,
                //traditional: true,
                dataType: "json",
                success: function (data) {
                    console.log(data);
                },
                error: function () {

                }
            });

出现了商品名称中的中文变成?的现象。猜测是编码问题。
通过浏览器控制台得知接收到的json数据的中文就是问号,问题发生在后端。
编写filter设置servletResponse的编码,没能解决问题

import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter(value="/*")//拦截所有请求和响应
@Component
public class ServletFilter implements Filter {


    @Override
   //初始化方法
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //统一处理请求和响应的乱码
        servletRequest.setCharacterEncoding("UTF-8");
        servletResponse.setCharacterEncoding("UTF-8");
        //过滤完之后需要放行请求和响应
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    //销毁方法
    public void destroy() {

    }
}

解决方法:

1.在请求映射的注解中添加 produces="application/json;charset=utf-8" 如:

    @ResponseBody
    @GetMapping(value="/product/{index}/{count}"
            ,produces = "application/json;charset=utf-8"
    )
    public String getProductBySearch(@RequestParam(required = false) String product_name/* 产品名称 */,
       JSONObject object = new JSONObject();
       //object.put(...,...);
       return object,toJSONString();
    }

这种方法需要改动多个请求映射的注解
2.在springMVC里配置StringHttpMessageConverter

<mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                    <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

3.写配置类,实现WebMvcConfigurer,添加messageConverter

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        WebMvcConfigurer.super.configureMessageConverters(converters);
        StringHttpMessageConverter converter = new StringHttpMessageConverter();
        converter.setDefaultCharset(StandardCharsets.UTF_8);
        converters.add(converter);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值