public void setPodsString key MapString Object value redisTemplateopsForHashputAllnxConfiggetKeyPrefix + keyvalue; 上面这个redis的方法把字符串podall当key传入MapSringpod当value传入pod是实体对象上面这个方法会报错 javalangCl
这个错误是因为在执行redisTemplate.opsForHash().putAll()方法时,value中的某些对象被误认为是String类型,而实际上是com.chinamobile.deepwatch.identity.core.standard.cmdb.pod类型,所以出现了类型转换异常。
要解决这个问题,需要确认Map<String, Object> value中的所有对象都是可以被转换成String类型的。如果value中包含非String类型的对象,可以考虑将其转换成String类型再存入redis中。可以通过在实体类中重写toString()方法,将实体对象转换成String类型的方式来解决这个问题。例如:
public class Pod { private String name; private String ip;
// 省略getter和setter
@Override
public String toString() {
return "Pod{" +
"name='" + name + '\'' +
", ip='" + ip + '\'' +
'}';
}
}
然后在执行setPods()方法时,将实体对象转换成String类型即可:
Map<String, Object> podMap = new HashMap<>(); podMap.put("pod1", new Pod("pod1", "192.168.0.1")); podMap.put("pod2", new Pod("pod2", "192.168.0.2")); redisTemplate.opsForHash().putAll("podall", podMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().toString())))
原文地址: http://www.cveoy.top/t/topic/g8Ka 著作权归作者所有。请勿转载和采集!