@ResponseBody 返回乱码问题解决方法之一

本文介绍了如何解决在使用@ResponseBody返回数据时出现的乱码问题。通过设置正确的接受协议配置(Accept: application/json;charset=utf-8),可以有效解决乱码问题。文中还提到了尝试配置SpringMVC的方法,但最终确定是通过AJAX请求头设置解决的。

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

遇到@ResponseBody 返回?????。然后百度了好久,都说要配置spring文件。配置了还是有问题。后来找到个说是配置ajax接受协议配置的:Accept: “application/json; charset=utf-8” 终于解决了。
我按网上的说法,去添加了springmvc配置:

<mvc:annotation-driven>  
        <mvc:message-converters>  
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">  
                <property name="supportedMediaTypes" value="text/html;charset=utf-8"></property>  
            </bean>  
        </mvc:message-converters>  
    </mvc:annotation-driven>

但是不起效。然后加了下面的这句:

headers: {
        Accept: "application/json; charset=utf-8"
    },
起效了。我觉得应该就是这句解决了问题吧。没去研究是不是因为配置了springmvc和这个一起才有效。下次有空再更进,所以如果使用了下面这句还不行,就把springmvc的那个配置加上就好了。

一、setting参数 headers

$.ajax({

    headers: {
        Accept: "application/json; charset=utf-8"
    },
    type: "get",
    success: function (data) {
    }
});
### 若依框架前后端分离运行时乱码问题解决方案 #### 后端配置调整 为了确保后端能够正确处理并返回UTF-8编码的数据,在控制器层面上设置响应头中的字符集为`utf-8`是非常重要的措施之一。具体来说,可以在Spring MVC的请求映射方法上通过指定`produces`属性来实现这一点[^2]。 ```java @ResponseBody @GetMapping(value = "/yourEndpoint", produces = "application/json;charset=UTF-8") public ResponseEntity<?> yourMethod(@RequestParam(required=false) String param){ // 方法体... } ``` 上述代码片段展示了如何定义一个GET类型的HTTP接口,并指定了该接口产生的内容类型及其字符集编码方式。这里选择了JSON作为媒体类型,并明确声明了使用的字符集是UTF-8,这有助于防止因浏览器或客户端默认采用其他编码而导致的乱码现象。 #### 数据库连接参数优化 除了后端服务本身外,还需要关注应用程序与数据库之间的交互过程是否存在潜在的编码隐患。对于基于MySQL的关系型数据库而言,建议在JDBC URL中加入适当的初始化命令以强制使用Unicode以及特定的语言环境(locale),从而保障SQL语句执行期间不会因为字符集不匹配而引发异常情况[^3]。 例如: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/yourdb?useUnicode=true&characterEncoding=utf8mb4&serverTimezone=UTC ``` 这段配置说明了当应用启动并与数据库建立连接之前应该启用哪些选项。“useUnicode=true”指示驱动程序始终发送Unicode字符串,“characterEncoding=utf8mb4”则设定了具体的字符集名称,它支持更广泛的字符范围,特别是表情符号等四字节字符;同时设置了服务器的时间区域为协调世界时间(UTC),避免可能出现的时间戳解析错误。 #### Redis缓存操作注意事项 针对RedisTemplate写入数据过程中遇到的乱码难题,通常是因为序列化机制未能妥善保存原始对象的信息所致。因此推荐自定义键值对序列化的策略,比如利用Jackson JSON处理器来进行转换工作,这样既能保持较高的性能水平又能兼容多种复杂结构的对象存储需求[^1]。 下面是一个简单的例子展示怎样创建带有定制化序列器和反序列器实例的RedisTemplate Bean: ```java @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); Jackson2JsonRedisSerializer<Object> jacksonSer = new Jackson2JsonRedisSerializer<>(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jacksonSer.setObjectMapper(om); template.setValueSerializer(jacksonSer); // 设置value序列化规则 template.setKeySerializer(new StringRedisSerializer()); // key采用String形式 template.setConnectionFactory(factory); return template; } } ``` 此段配置文件片段实现了对RedisTemplate组件的关键部分——即key-value序列化逻辑进行了重新设定,使得无论是简单还是复杂的业务实体都能够被安全地持久化到内存数据库之中而不至于丢失任何重要信息或者产生不可读取的结果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值