使用redis异常,求教是什么问题?

09:40:50.826 [XNIO-3 task-1] ERROR c.j.core.ActionHandler - com.tb.controller.api.ApiCartController.count() : /api/cart/count?timestamp=1565919650501&sign=42260bc72e1972bef28755ff1036ac1f&loginToken=2bc28853f1f34a2c9dfd9e25d6d7addd&appid=wx8de71df255e24ef3&code=081xSbUb2GGtHM08aYVb2tzfUb2xSbUd 
java.lang.RuntimeException: java.io.IOException: java.lang.NullPointerException
	at com.jfinal.plugin.redis.serializer.FstSerializer.valueFromBytes(FstSerializer.java:78)
	at com.jfinal.plugin.redis.Cache.valueFromBytes(Cache.java:1217)
	at com.jfinal.plugin.redis.Cache.get(Cache.java:91)
	at com.yayu.service.WxUserService.findByLoginToken(WxUserService.java:30)
	at com.yayu.common.interceptor.WxUserInter.intercept(WxUserInter.java:24)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:91)
	at com.yayu.common.interceptor.ApiSignInter.intercept(ApiSignInter.java:23)
	at com.jfinal.aop.Invocation.invoke(Invocation.java:91)
	at com.jfinal.core.ActionHandler.handle(ActionHandler.java:82)
	at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:89)
	at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
	at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
	at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
	at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
	at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
	at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
	at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:132)
	at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
	at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
	at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
	at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
	at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
	at io.undertow.servlet.handlers.SessionRestoringHandler.handleRequest(SessionRestoringHandler.java:119)
	at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
	at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
	at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
	at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
	at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
	at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
	at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
	at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:364)
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:830)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.io.IOException: java.lang.NullPointerException
	at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:247)
	at com.jfinal.plugin.redis.serializer.FstSerializer.valueFromBytes(FstSerializer.java:75)
	... 40 common frames omitted
Caused by: java.lang.NullPointerException: null
	at org.nustaq.serialization.FSTObjectInput.readObjectWithHeader(FSTObjectInput.java:357)
	at org.nustaq.serialization.FSTObjectInput.readObjectInternal(FSTObjectInput.java:331)
	at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:311)
	at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:245)
	... 41 common frames omitted


评论区

nbjgl

2019-08-16 09:42

引入依赖:

de.ruedigermoeller
fst
2.57



redis.clients
jedis
2.9.0



com.alibaba
fastjson
1.2.47

nbjgl

2019-08-16 09:42

Redis.use().get("xxxxx") 就报错

JFinal

2019-08-16 10:20

@nbjgl 空指针异常是最好解决的,单步调试一下看哪个对象为 null 值引起的

gwc

2019-08-19 22:48

@nbjgl 解决了吗,也遇到了这个问题

nbjgl

2019-08-20 07:50

@gwc 不同的项目使用同一个redis,另外一个项目是springBoot的,读取非JFinal项目存储的值的时候,会抛出序列化异常。读写都必须用JFinal的API才行。

JFinal

2019-08-20 11:12

@nbjgl 也并不是必须用 JFinal 的 API 才行,只要序列化与反序列化用的是同一个规则即可

jfinal redis 插件默认用的 fst 这个第三方进行的序列化与反序列化,所以,你在 spring boot 等其它场景需要与 jfinal 互相使用同一个 reids 中的数据时,也只要使用这个 fst 就可以了

你还可以通过 RedisPlugin.setSerializer(...) 来重新制定自己的序列化、反序列化规则,同样地,只要将不同地方的这个规则统一,就可以互通了

jfinal初识

2019-09-07 10:17

跟jfinal没有关系,要搞清楚知识范围!!!

nbjgl

2019-09-07 10:50

@jfinal初识 就是小白,没地方问,来社区问问不行吗?╭(╯^╰)╮

jfinal初识

2019-09-07 12:10

@nbjgl 阔以,某问题啦,注意序列化和反序列化的方式保持一致

热门反馈

扫码入社