java中使用redistemplate向redis中存储JSONObject,以及该如何取出,取值时保持错invalid stream header: 00000000
时间: 2024-09-11 20:19:08 浏览: 54
在Java中,你可以使用Spring Data Redis的`Redistemplate`来进行JSON对象的存储和检索操作。首先,确保已添加Spring Data Redis依赖,并配置了Redis连接。
1. 存储JSONObject到Redis:
```java
@Autowired
private StringRedisTemplate stringRedisTemplate;
public void storeJSONObject(JSONObject jsonObject, String key) {
try {
byte[] jsonBytes = new ObjectMapper().writeValueAsBytes(jsonObject);
stringRedisTemplate.opsForValue().set(key, new String(jsonBytes, StandardCharsets.UTF_8));
} catch (JsonProcessingException e) {
throw new RuntimeException("Failed to convert JSONObject to bytes", e);
}
}
```
这里,我们使用`ObjectMapper`将JSONObject转换为字节数组,然后设置到Redis中。
2. 取出JSONObject:
```java
public JSONObject getJSONObjectFromRedis(String key) {
byte[] jsonBytes = stringRedisTemplate.opsForValue().get(key);
if (jsonBytes != null) {
try {
return new ObjectMapper().readValue(jsonBytes, JSONObject.class);
} catch (IOException e) {
// 处理无效的JSON数据异常
throw new InvalidStreamHeaderException("Invalid JSON data received: " + e.getMessage(), e);
}
} else {
return null;
}
}
```
当尝试从Redis读取并解析JSON时,如果遇到`InvalidStreamHeaderException`,可能是JSON数据损坏或格式错误。你需要捕获这个异常,并提供相应的处理,比如返回默认值或者抛出异常给上层调用者。
阅读全文