Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ObjectMapper Redis序列化问题_Java_Redis_Jackson - Fatal编程技术网

Java ObjectMapper Redis序列化问题

Java ObjectMapper Redis序列化问题,java,redis,jackson,Java,Redis,Jackson,我正在尝试缓存这样的实体: class Foo { String attr1; Set<Long> attr2; Set<Long> attr3; } { "attr1": "123456789", "attr2": [ "java.util.HashSet", [ [ "java.lang.Long&qu

我正在尝试缓存这样的实体:

class Foo {
    String attr1;
    Set<Long> attr2;
    Set<Long> attr3;
}
{
  "attr1": "123456789",
  "attr2": [
    "java.util.HashSet",
    [
      [
        "java.lang.Long",
        1
      ],
      [
        "java.lang.Long",
        2
      ],
      [
        "java.lang.Long",
        3
      ]
    ]
  ],
  "attr3": [
    "java.util.HashSet",
    []
  ]
}
但当尝试从redis读回时,我的代码失败,出现以下异常:

org.springframework.data.redis.serializer.SerializationException: Could not read JSON: Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class java.lang.Object
 at [Source: (byte[])"{"attr1":"123456789","attr2":["java.util.HashSet",[["java.lang.Long",1],["java.lang.Long",2],["java.lang.Long",3]]],"attr3":["java.util.HashSet",[]]}"; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class java.lang.Object
 at [Source: (byte[])"{"attr1":"123456789","attr2":["java.util.HashSet",[["java.lang.Long",1],["java.lang.Long",2],["java.lang.Long",3]]],"attr3":["java.util.HashSet",[]]}"; line: 1, column: 1]
    at org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer.deserialize(GenericJackson2JsonRedisSerializer.java:152)
    at org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer.deserialize(GenericJackson2JsonRedisSerializer.java:130)
    at org.springframework.data.redis.serializer.DefaultRedisElementReader.read(DefaultRedisElementReader.java:49)
    at org.springframework.data.redis.serializer.RedisSerializationContext$SerializationPair.read(RedisSerializationContext.java:272)
    at org.springframework.data.redis.cache.RedisCache.deserializeCacheValue(RedisCache.java:280)
    at org.springframework.data.redis.cache.RedisCache.lookup(RedisCache.java:94)
    at org.springframework.cache.support.AbstractValueAdaptingCache.get(AbstractValueAdaptingCache.java:58)
    at org.springframework.cache.interceptor.AbstractCacheInvoker.doGet(AbstractCacheInvoker.java:73)
    at org.springframework.cache.interceptor.CacheAspectSupport.findInCaches(CacheAspectSupport.java:571)
    at org.springframework.cache.interceptor.CacheAspectSupport.findCachedItem(CacheAspectSupport.java:536)
    at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:402)
    at org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:345)
    at org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:64)
如果从ObjectMapper中删除默认类型,异常将更改为:

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.foo.Foo
    at com.sun.proxy.$Proxy190.findByAuuid(Unknown Source)
    at com.foo.FooService.getFoo(FooServiceImpl.java:80)
    at com.foo.FooService.getFooImpl$$FastClassBySpringCGLIB$$349e7f48.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
java.lang.ClassCastException:java.util.LinkedHashMap不能强制转换为com.foo.foo
位于com.sun.proxy.$Proxy190.findByAuuid(未知源)
在com.foo.FooService.getFoo(FooServiceImpl.java:80)
在com.foo.FooService.getFooImpl$$FastClassBySpringCGLIB$$349e7f48.invoke()上
位于org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
位于org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
我应该怎么做才能将其反序列化而不会出现问题

短暂性脑缺血发作

java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.foo.Foo
    at com.sun.proxy.$Proxy190.findByAuuid(Unknown Source)
    at com.foo.FooService.getFoo(FooServiceImpl.java:80)
    at com.foo.FooService.getFooImpl$$FastClassBySpringCGLIB$$349e7f48.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)