zoukankan      html  css  js  c++  java
  • SpringBoot中Redis配置类报错处理Unexpected_token(START_OBJECT)

    一、redisTemplate获取时报错:

    Caused by: com.fasterxml.jackson.databind.JsonMappingException:
    Unexpected token (START_OBJECT), expected START_ARRAY:
    need JSON Array to contain As.WRAPPER_ARRAY type information for class java.lang.Object

    二、报错代码行:

    Object obj = redisTemplate.opsForValue().get(key);
    

    三、找到配置类,注释掉这一行:

    objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); 
    

    完整的配置

    @Bean
    	public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
    		log.info(" --- redis config init --- ");
    		Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer =jacksonSerializer();
    		RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
    		redisTemplate.setConnectionFactory(lettuceConnectionFactory);
    		RedisSerializer<?> stringSerializer = new StringRedisSerializer();
    		// key序列化
    		redisTemplate.setKeySerializer(stringSerializer);
    		// value序列化
    		redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
    		// Hash key序列化
    		redisTemplate.setHashKeySerializer(stringSerializer);
    		// Hash value序列化
    		redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
    		redisTemplate.afterPropertiesSet();
    		return redisTemplate;
    	}
    
    	private Jackson2JsonRedisSerializer jacksonSerializer() {
    		Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
    		ObjectMapper objectMapper = new ObjectMapper();
    		objectMapper.setVisibility(PropertyAccessor.ALL, Visibility.ANY);
        // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常
    		// 保留这行会报错:Unexpected token (VALUE_STRING)
    		//objectMapper.enableDefaultTyping(DefaultTyping.NON_FINAL);
    		jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
    		return jackson2JsonRedisSerializer;
    	}
    
  • 相关阅读:
    .NET下的并行开发
    .NET下单文件的上传处理
    .NET下dropdownlist的基本操作
    [Python3网络爬虫开发实战] 3.1.1-发送请求
    [Python3网络爬虫开发实战] 3.1.2-处理异常
    [Python3网络爬虫开发实战] 3.1-使用urllib
    [Python3网络爬虫开发实战] 2.4-会话和Cookies
    [Python3网络爬虫开发实战] 2.5-代理的基本原理
    [Python3网络爬虫开发实战] 2.3-爬虫的基本原理
    [Python3网络爬虫开发实战] 2.2-网页基础
  • 原文地址:https://www.cnblogs.com/eternityz/p/15329988.html
Copyright © 2011-2022 走看看