2020-06-02 22:10

@halason 刚刚已经改进了这个功能,支持 reentry 重入型 json 转换,这下完美了

版本号改成了 4.9.1 ,你可以通过下面的办法先用上:
https://jfinal.com/share/2093

以后升级也改不必改代码

谢谢你的反馈,这个问题挺重要。

最后,谢谢你这些年来对 jfinal 俱乐部的支持

2020-06-02 22:07

为什么非得要别人问你是什么错,你才肯提供呢?

网上搜索一下 "提问的艺术",先学会提问

2020-06-02 22:04

这种用法节省了代码,非常赞

有个小建议, Object ret = inv.getReturnValue() 还可以做得更智能一些,例如:
if (ret intanceof String) {
render((String)ret);
} else {
renderJson(ret);
}


这样改进的话, controller 中就可以这么来玩了:
public Ret doPublish() {
// 从param中获取name 和 age
if(StrKit.isBlank("name")) {
return Ret.by("msg", "名称不能为空");
}
if(StrKit.isBlank("age")) {
return Ret.by("msg", "年龄不能为空");
}

if (notLogin()) {
return "login.html";
}

return "index.html";
}

2020-06-02 18:25

上面给的解决方案,需要在 JsonResult.java 中添加如下方法:
public int length() {
return sb.length();
}

所以,当前情况下,最好还是你 copy 出这个模块的代码放在自己的项目中改写,然后用 me.setJsonFactory(...) 配置用上

2020-06-02 18:21

出现这个问题的原因,并不是因为新版本的 JFinalJson 的转换规则变了,而是因为 ThreadLocal 中共享的 JsonResult 在嵌套重入以后无法被共享

为了保障兼容性,JFinalJson 新旧版本的转换规则是完全一样的,你碰到的这问题不是转换规的范畴

我会找个好的设计解决这个问题

2020-06-02 18:20

@halason 确实有问题,原因是你的套嵌调用 JFinalJson.toJson() 的用法,在第二次进入 toJson 方法时,重用了 ThreadLocal 中的 JsonResult

这种问题应该是十分罕见的,你先通过继承 JFinalJson 来解决一下:
public class MyJFinalJson extends JFinalJson {

@Override
@SuppressWarnings({"rawtypes", "unchecked"})
public String toJson(Object object) {
if (object == null) {
return "null";
}

JsonResult ret = TL.get();

if (ret.length() > 0) {
JsonResult jsonResult = new JsonResult();

// 优先使用对象级的属性 datePattern, 然后才是全局性的 defaultDatePattern
String dp = datePattern != null ? datePattern : getDefaultDatePattern();
jsonResult.init(dp, timestampPattern);
ToJson toJson = kit.getToJson(object);
toJson.toJson(object, convertDepth, jsonResult);
String jsonString = jsonResult.toString();
jsonResult.clear();
return jsonString;
}

try {
// 优先使用对象级的属性 datePattern, 然后才是全局性的 defaultDatePattern
String dp = datePattern != null ? datePattern : getDefaultDatePattern();
ret.init(dp, timestampPattern);
ToJson toJson = kit.getToJson(object);
toJson.toJson(object, convertDepth, ret);
return ret.toString();
}
finally {
ret.clear();
}
}

}

通过上面的方式扩展以后,再配置一下就好:
me.setJsonFactory(() -> new MyJFinalJson());

2020-06-02 15:48

具体出了什么问题呢?

2020-06-02 14:37

异常信息不全

此外,异常信息中出现了 JettyServer, 显然打包方式就错了

正确的打 jar 包运行的方式需要下载本站首页右侧的 jfinal_demo_for_maven-4.9.zip

里头有一个目录叫:"启动说明/fatjar-打包部署方法",下面有一个文件叫:
"fatjar-打包部署方法.txt", 这个文件详细告诉了你如何打成 jar 包去运行

2020-06-02 14:34

进入 https://jfinal.com/my/feedback
点击右侧修改按钮,可修改这个贴子

2020-06-02 13:13

jfinal weixin 中有现成的例子可用:
https://gitee.com/jfinal/jfinal-weixin/blob/master/src/main/java/com/jfinal/weixin/demo/WeixinPayController.java

2020-06-02 13:12

@路遥_美好人生 超着年轻,一定要去北、上、广、深、杭这些大城市去工作,小地方的机会要少得多

如果是南方人,就不要去北京,那边的环境太干燥,空气质量也很差,南方人会不太适应

以你目前的技术水平完全可以找一个很好的工作,要尽早参与到工作中来,不要等到学会了游泳才下水

以你当前的技术,除了前面讲的工作以外,你要更关注做产品,因为技术永远只是手段,用技术实现目标才是根本目的

2020-06-02 13:08

贴代码注意点击左上角的 "代码语言" 下拉框,选择 java

否则你贴出来的代码丢失大量信息,你仔细看看你贴的什么

2020-06-01 21:41

@路遥_美好人生 代码质量、结构完全不像是毕业两年的同学写的,再过两年,难以想象发展到何种高度

在技术好的同时,刻意培养些商业眼光或者商业敏感度,早日实现财富自由

2020-06-01 21:23

@tyroxyz 可能是你数据库配置的问题,这个警告信息与你自己的代码应该没啥关系

jfinal 也不会输出这类信息