Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Unexpected character ('¬' (cod
时间: 2025-04-21 21:38:18 浏览: 26
### 解决 Spring Boot 应用中 Redis 反序列化异常问题
当遇到 `SerializationException` 错误提示无法读取 JSON 并指出意外字符 `'¬' (code 172)` 的情况时,这通常意味着在尝试解析来自 Redis 的数据时遇到了不期望的数据格式[^1]。
#### 原因分析
错误的根本原因在于 Redis 中存储的消息未能被正确地序列化成合法的 JSON 字符串。具体来说,在将 Java 对象转为 JSON 进行传输之前可能存在编码或对象状态的问题,导致最终形成的不是有效的 JSON 数据而是包含了非法字符的内容[^2]。
#### 解决策略
为了防止此类问题的发生并确保消息能够成功传递与处理:
- **配置自定义序列化器**
通过设置合适的键值对序列化方式来替代默认行为可以有效规避此风险。对于字符串类型的 key 和 value 推荐采用 `StringRedisSerializer`;而对于复杂对象则建议利用 Jackson 提供的支持更广泛类型的 `Jackson2JsonRedisSerializer` 或者通用性强但性能稍逊一筹的 `GenericJackson2JsonRedisSerializer` 来完成序列化的操作。
```java
// 配置类中的部分代码片段展示如何指定序列化策略
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
// 设置key和hashKey都使用StringRedisSerializer
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
// 使用Jackson2JsonRedisSerializer作为value和hashValue的序列化工具
Jackson2JsonRedisSerializer 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);
template.setHashValueSerializer(jacksonSer);
template.afterPropertiesSet();
return template;
}
```
- **优化消息发送逻辑**
确保所有要存入 Redis 的数据都是经过严格验证后的标准 JSON 格式。可以通过引入额外的日志记录机制监控实际发出的信息内容,以便及时发现潜在的风险点。另外值得注意的是,如果应用程序依赖于第三方库来进行 JSON 处理,则应确认这些库版本是最新的并且兼容当前项目环境的要求。
```java
try{
// 发送前先打印日志查看json结构是否正常
log.info("Sending message: {}", json);
}catch(JsonProcessingException e){
throw new RuntimeException(e);
}
```
上述措施有助于提高系统的健壮性和稳定性,减少由于不当序列化引起的故障发生率。
阅读全文
相关推荐










