org.springframework.cache.interceptor.SimpleKey cannot be cast to java.lang.String

springboot整合redis时,使用@Cacheable注解,如果方法的key参数为空,就会报org.springframework.cache.interceptor.SimpleKey cannot be cast to java.lang.String的错误。

? 1 错误信息

? 2 如图

? 3 解决方案

package com.test.config;

import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.core.RedisTemplate;

/**
 * Created by toutou on 2019/3/9.
 */
@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {

    @Override
    @Bean
    public KeyGenerator keyGenerator() {
        return (target, method, params) -> {
            StringBuilder sb = new StringBuilder();
            sb.append(target.getClass().getName());
            sb.append(method.getName());
            for (Object obj : params) {
                sb.append(obj.toString());
            }
            return sb.toString();
        };
    }

    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
        // 设置默认过期时间为60秒
        cacheManager.setDefaultExpiration(60);
        return cacheManager;
    }
}

原文地址:https://www.cnblogs.com/toutou/p/10516440.html

时间: 2024-10-19 03:29:18

org.springframework.cache.interceptor.SimpleKey cannot be cast to java.lang.String的相关文章

org.springframework.boot.actuate.endpoint.EndpointId cannot be cast to java.lang.String 异常处理

用了spring-boot-starter-actuator 之后出现异常: java.lang.ClassCastException: org.springframework.boot.actuate.endpoint.EndpointId cannot be cast to java.lang.String.详细的异常如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Failed to instantiate [o

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

1.错误描写叙述 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String service.impl.ArrivalBillServiceImpl.exportBillExcel(BillServiceImpl.java:266) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.Na

Redis 自定义对象 cannot be cast to java.lang.String

Redis序列化对象的时候报错如下 java.lang.ClassCastException: com.ppdai.cbd.ddp.thirdparty.contract.bhxtzx.BHXTZXTask cannot be cast to java.lang.String at org.springframework.data.redis.serializer.StringRedisSerializer.serialize(StringRedisSerializer.java:33) at

数据转换bug花了半天时间 Java.math.BigDecimal cannot be cast to java.lang.String

从数据库取出一个 Count函数 统计的值 在代码中要转成Integer类型的时候 Integer.parseInt((String)map.get("ID_")) 报了一下错误: Java.math.BigDecimal cannot be cast to java.lang.String 解决方法: Object ob = map.get("ID_");先将数据转成 Integer.parseInt(ob.toString()); http://blog.csd

java.math.BigDecimal cannot be cast to java.lang.String   ----解决方案

今天在开发的时候遇到了一个问题,在此记录一下,问题的大概意思就是类型不一致不能进行强转 代码如下: rolf.setFuncd((String) rece.get("FUN_CD"));//强转 rolf.setFunid((String) rece.get("FUN_ID")); //强转 rolf.setFunnm((String) rece.get("FUN_NM")); //强转 因为我第二段的代码Orc数据库的字段类型是number,而

在拦截器中获取请求参数,[Ljava.lang.String; cannot be cast to java.lang.String报错

Map<String,Object> parametersmap=invocation.getInvocationContext().getParameters();//获取请求参数                Set<String> parametersset=parametersmap.keySet();                for(String key:parametersset){ System.out.println(key+":"+par

JSONObject转换Int类型--java.lang.Integer cannot be cast to java.lang.String

参数 params={"abc":0} JSONObject转换Int类型 JSONObject json = JSONObject.fromObject(params); if (json.containsKey("desgin_review_type")) { value=json.getInt("abc")+""; } } 运行错误写法<java.lang.Integer cannot be cast to jav

java.lang.character cannot be cast to java.lang.String

今天在因为修改了存储过程的参数,要增加传入的参数,数据为Mysql.在写的过程中,把这默认传值简单的写成了死值.但是运行后发现报错了. java.lang.character cannot be cast to java.lang.String 这个错误.然后查代码,上网找答案.最后终于解决了. 是因为我在传值的时候写的是. '0' 这样传入的值就带着单引号一起传了. 最后修改成"0". 问题解决. 这个也不算什么大问题,只是平时在写代码的时候不太注意. 希望自己以后改掉这个毛病. 与

“无效数字” ;java.lang.Integer cannot be cast to java.lang.String

今天页面上突然查询不出数据,大致的sql语句是 select xx ,xxx from table a where a.lrmb in ( 6101060033, 61010503300, 61016666645 ) order by xxx desc 报错信息是"无效数字",很快就发现是lrbm这个字段里面的数字上没有引号,而之前一直是可以查询出数据的,所以很可能是数据库里面有人人工的添加了一条数据,这条数据的lrbm字段的类型有错,待会儿在自己本地 数据库里面测试一条错误哦数据测试