有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring会话Redis如何配置RedistemAlte以使用jackson序列化器/反序列化器

我想使用jackson serializer/de-serializer for在Spring redis中存储会话信息,但在如下配置redis tempalte之后,仍然使用JDKDefaultSerializer。 下面是stacktrace,我们可以看到它仍然使用JDKDefault序列化程序。如何重写以使用jackson序列化程序而不是默认的JDKSerializer

我想使用jackson序列化程序,因为我可以将objectmapper配置为在反序列化会话数据时忽略未知的proeprities和bean。在我们的例子中,一个微服务设置详细说明了会话中的对象,但在从另一个微服务检索会话时发现了“未找到类”异常,因为该类在第二个微服务源代码中不可用。非常感谢您为解决此问题提供的任何帮助

@Bean
public <K> RedisTemplate<String,K> redisTemplate(RedisConnectionFactory connectionFactory) {
    RedisTemplate<String, K> template = new RedisTemplate<>();
    template.setConnectionFactory(connectionFactory
        );
    Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
    ObjectMapper mapper = new ObjectMapper();
    mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
    mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
    mapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING, false);
    mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    serializer.setObjectMapper(mapper);
    template.setDefaultSerializer(serializer);
    template.setKeySerializer(new StringRedisSerializer());
    template.setHashKeySerializer(serializer);
    template.setValueSerializer(serializer);
    template.afterPropertiesSet();
    return template;
}



Caused by: java.lang.ClassNotFoundException: com.hello.details
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[?:1.8.0_301]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_301]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) ~[?:1.8.0_301]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_301]
    at java.lang.Class.forName0(Native Method) ~[?:1.8.0_301]
    at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_301]
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:284) ~[spring-core-5.3.9.jar:5.3.9]
    at org.springframework.core.ConfigurableObjectInputStream.resolveClass(ConfigurableObjectInputStream.java:76) ~[spring-core-5.3.9.jar:5.3.9]
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1984) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1848) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2158) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1665) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:501) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:459) ~[?:1.8.0_301]
    at java.util.HashMap.readObject(HashMap.java:1412) ~[?:1.8.0_301]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_301]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_301]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_301]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_301]
    at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1185) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2294) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2185) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1665) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2403) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2327) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2185) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1665) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:501) ~[?:1.8.0_301]
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:459) ~[?:1.8.0_301]
    at org.springframework.core.serializer.DefaultDeserializer.deserialize(DefaultDeserializer.java:72) ~[spring-core-5.3.9.jar:5.3.9]
    at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:73) ~[spring-core-5.3.9.jar:5.3.9]
    at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:36) ~[spring-core-5.3.9.jar:5.3.9]
    at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:82) ~[spring-data-redis-2.5.3.jar:2.5.3]
    at org.springframework.data.redis.core.AbstractOperations.deserializeHashValue(AbstractOperations.java:355) ~[spring-data-redis-2.5.3.jar:2.5.3]
    at org.springframework.data.redis.core.AbstractOperations.deserializeHashMap(AbstractOperations.java:299) ~[spring-data-redis-2.5.3.jar:2.5.3]
    at org.springframework.data.redis.core.DefaultHashOperations.entries(DefaultHashOperations.java:247) ~[spring-data-redis-2.5.3.jar:2.5.3]
    at org.springframework.data.redis.core.DefaultBoundHashOperations.entries(DefaultBoundHashOperations.java:183) ~[spring-data-redis-2.5.3.jar:2.5.3]
    at org.springframework.session.data.redis.RedisIndexedSessionRepository.getSession(RedisIndexedSessionRepository.java:457) ~[spring-session-data-redis-2.5.1.jar:2.5.1]
    at org.springframework.session.data.redis.RedisIndexedSessionRepository.findById(RedisIndexedSessionRepository.java:429) ~[spring-session-data-redis-2.5.1.jar:2.5.1]
    at org.springframework.session.data.redis.RedisIndexedSessionRepository.findById(RedisIndexedSessionRepository.java:251) ~[spring-session-data-redis-2.5.1.jar:2.5.1]
    at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.getRequestedSession(SessionRepositoryFilter.java:356) ~[spring-session-core-2.5.1.jar:2.5.1]
    at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.getSession(SessionRepositoryFilter.java:290) ~[spring-session-core-2.5.1.jar:2.5.1]
    at org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper.getSession(SessionRepositoryFilter.java:193) ~[spring-session-core-2.5.1.jar:2.5.1]
    at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:221) ~[jakarta.servlet-api-4.0.4.jar:4.0.4]
    at org.springframework.security.web.savedrequest.HttpSessionRequestCache.getRequest(HttpSessionRequestCache.java:85) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.security.web.savedrequest.HttpSessionRequestCache.getMatchingRequest(HttpSessionRequestCache.java:100) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:61) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:103) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:89) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) ~[spring-web-5.3.9.jar:5.3.9]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) ~[spring-web-5.3.9.jar:5.3.9]
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:211) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:183) ~[spring-security-web-5.5.1.jar:5.5.1]
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358) ~[spring-web-5.3.9.jar:5.3.9]
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271) ~[spring-web-5.3.9.jar:5.3.9]
    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.2.9.Final.jar:2.2.9.Final]
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.2.9.Final.jar:2.2.9.Final]
    at org.springframework.session.web.http.SessionRepositoryFilter.doFilterInternal(SessionRepositoryFilter.java:142) ~[spring-session-core-2.5.1.jar:2.5.1]
    at org.springframework.session.web.http.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:82) ~[spring-session-core-2.5.1.jar:2.5.1]
    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.2.9.Final.jar:2.2.9.Final]
    at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.2.9.Final.jar:2.2.9.Final]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) ~[spring-web-5.3.9.jar:5.3.9]
    at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61) ~[undertow-servlet-2.2.9.Final.jar:2.2.9.Final]

共 (0) 个答案