运行jfinal weixin 1.8项目提示json解错误

29-Nov-2016 09:52:25.101 WARNING [http-apr-8080-exec-12] com.jfinal.kit.LogKit.warn retry on 1 times v = null

 java.lang.RuntimeException: java.lang.RuntimeException: jfinal 2.2默认 json 实现暂不支持 json 到 object 的转换,建议使用 active recrord 的 Generator 生成 base model,再通过 me.setJsonFactory(new JacksonFactory()) 来支持

at com.jfinal.weixin.sdk.api.AccessToken.<init>(AccessToken.java:45)

at com.jfinal.weixin.sdk.api.AccessTokenApi$1.call(AccessTokenApi.java:73)

at com.jfinal.weixin.sdk.api.AccessTokenApi$1.call(AccessTokenApi.java:68)

at com.jfinal.weixin.sdk.utils.RetryUtils.retryOnException(RetryUtils.java:32)

at com.jfinal.weixin.sdk.api.AccessTokenApi.refreshAccessToken(AccessTokenApi.java:68)

at com.jfinal.weixin.sdk.api.AccessTokenApi.getAccessToken(AccessTokenApi.java:46)

at com.jfinal.weixin.sdk.api.TemplateMsgApi.send(TemplateMsgApi.java:25)

at com.weisys.weixin.WeixinApiController.sendMsg(WeixinApiController.java:119)

at sun.reflect.GeneratedMethodAccessor31.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java)

at java.lang.reflect.Method.invoke(Method.java:498)

at com.jfinal.aop.Invocation.invoke(Invocation.java:73)

at com.jfinal.weixin.sdk.jfinal.ApiInterceptor.intercept(ApiInterceptor.java:21)

at com.jfinal.aop.Invocation.invoke(Invocation.java:67)

at com.jfinal.core.ActionHandler.handle(ActionHandler.java:74)

at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)

at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:106)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)

at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)

at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)

at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508)

at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.RuntimeException: jfinal 2.2默认 json 实现暂不支持 json 到 object 的转换,建议使用 active recrord 的 Generator 生成 base model,再通过 me.setJsonFactory(new JacksonFactory()) 来支持

at com.jfinal.json.JFinalJson.parse(JFinalJson.java:335)

at com.jfinal.weixin.sdk.utils.JsonUtils.parse(JsonUtils.java:149)

at com.jfinal.weixin.sdk.api.AccessToken.<init>(AccessToken.java:35)

... 34 more

但在configConstant中me.setJsonFactory(new FastJsonFacoty())还是报这个错误,怎么事着,

评论区

JFinal

2016-11-29 10:33

jfinal weixin 之中这样用: FastJson.getJson().parse(...),记得回来反馈

lyh061619

2016-11-29 10:40

@JFinal 发现源码这截:
@SuppressWarnings("unchecked")
public AccessToken(String jsonStr) {
this.json = jsonStr;

try {
Map temp = JsonUtils.parse(jsonStr, Map.class);
access_token = (String) temp.get("access_token");
expires_in = getInt(temp, "expires_in");
errcode = getInt(temp, "errcode");
errmsg = (String) temp.get("errmsg");

if (expires_in != null)
expiredTime = System.currentTimeMillis() + ((expires_in -5) * 1000);

} catch (Exception e) {
throw new RuntimeException(e);
}
这位置:Map temp = JsonUtils.parse(jsonStr, Map.class)解析错了。

JFinal

2016-11-29 10:45

@lyh061619 应该是 JsonUtils 没有使用切换后的 JsonFactory,你再看看里面的代码

lyh061619

2016-11-29 10:49

@JFinal 最近搞个公众号项目,用1.9版本在开发中,1.8就卡在这个Json解析这不过。
-_-///

JFinal

2016-11-29 10:52

@lyh061619 jfinal 的 json 模块,可以混合使用,例如:
1:FastJson.getJson().parse(...)
2:Jackson.getJson().parse(...)
3:JFinalJson.getJson().parse(...)

lyh061619

2016-11-29 10:56

@JFinal 嗯!这个挺灵活的,也是第一次用jfinal weixin,现在直os git下下载源码放到项目中跑的,然后就卡在这里,然后试用了下1.9版本的,在_getParseId那获取不到线程中邦定的appId

lyh061619

2016-11-29 11:34

首先,使用idea作为开发工具,以上问题出现反馈急时得到波总指点,最后问题解决,总结如下:作为使用IDEA开发的朋友,切记在配置部署配置工程属性时,记得Artifacts下的Build on make这个选项给勾上,要不然随时有可能造成修改代码没有更新的情况出现,致使为怎么修改代码还是报同一个问题,哈哈。

JFinal

2016-11-29 14:51

@lyh061619 git 上的 jfinal weixin 源码不要直接用,还没发布的版本,不完善,直接用 jfinal weixin 1.8,在官网下载,或者通过 maven

lyh061619

2016-11-29 14:58

明白,谢谢波总。

lyh061619

2016-11-29 15:01

@JFinal 是开发用用下的,上线后是会用maven的^_^

javason

2017-12-13 09:53

还是没明白这个问题怎么解决?

kevin00012

2018-02-07 15:23

我还是没明白这个问题怎么解决!

热门反馈

扫码入社