2018-09-01 20:29

MixedJsonFactory 结合了 JFinalJson 支持 sql 关联查询的结果的 json 转化与 FastJson 的反向转 Model/Bean,一般用这个是最方便的

感谢分享

2018-09-01 20:27

@fansunion 数据库字段类型是 varchar 的时候,你可以重新运行一下 jfinal 生成器,那么相应的 getter setter 方法中的类型会跟着改变

此外,建议所有字段使用驼峰命名,这样就可以让 JFinalJson、FastJson 转 json string 时的格式统一了,无论是通过 getter 方法还是 Model.attrs 的 Map 转都一样的结果

2018-09-01 20:24

@nbjgl 那个太老了,你可以先参考 beetl 官网的方法整合 beetl,然后通过 renderTemplate(...) 来使用 enjoy 引擎

2018-09-01 19:30

引入一个 BaseController ,在其中做一个 renderBeetl(...) 方法,然后所有 Controller 继承这个即可

2018-09-01 18:47

再补充一个知识点:
配置 MixedJsonFactory、FastJsonFactory 等等 factory 以后,并不意思着不能使用其它类型的 json 转换工具了,还可以临时这么来用:
JFinalJson.getJson().toJson(...);
FastJson.getJson().toJson(...);

也就是说 factory 是配置默认,当不想使用默认时可以这样:
String json = JFinalJson.getJson().toJson(...);
renderJson(json);

2018-09-01 18:45

补充一个有用的点: JFinalJson 转 json 时不依赖于 getter 方法,而是将 Model.attrs 这个 Map 中的值转成 json,所以这就支持了你 sql 关联查询时查出来的字段

这类关联查出来的字段在 Model/Bean 中是没有 getter 方法的,相当于动态化了

例如,你在 Article 这个 model 中没有定义 getUserName() 这个方法,但可以这样查询:
select a.*, u.userName from article a inner join user u on a.userId = u.id

上面是一个关联查询,在转 json 时会将 u.userName 这个关联过来的属性转换成 json,而这个功能在一般的 json 转换工具中是不可能实现的

2018-09-01 18:41

我很怀疑你的数据库字段本来就是 varchar,而你却误以为是 date/datetime

2018-09-01 18:41

MixedJsonFactory 转 json string 时用的 JFinalJson,反过来转成 Model/Bean 时用的 FastJson,所以你在使用它时,仍然要用 put(...),否则直接使用 FastJsonFactory 即可,这个在文档中有过明确的说明:
http://www.jfinal.com/doc/12-3

String 到 Date 的类型转换错误还是没有找到源头,getCreateTime(...) 这个地方仅仅是异常抛出的地方,根本不是数据的源头

2018-09-01 17:36

Brand 光定义两个属性不够的,需要有相应的 getter 方法配套,因为 fastjson 是通过你的 getter 方法进行 json 转换的

如果用 jfinal 自己的 json 转换工具,则需要 put("company", company) 这样将数据 put 进去才能转换,总的来说没有必要定义属性

此外, createTime 转换错误,你看这个 String 数据是多哪里来的? 是不是自己放进去的? 还是说从数据库来的时候就是 String ?

一般来说 date 数据从数据库出来仍然是 Date 类型,而不会无故成为 String 类型,这个通过单步调试很容易知道类型为啥不对

2018-09-01 15:53

@fansunion 这个需求还用不着扩展 MetaBuilder, 即便是 mybatis , 我相信你在写 sql 时仍然还是要使用下划线形式的,否则 mybatis 还要将你的 sql 中的字段名强行再转换一次,这个成本就太高了

2018-09-01 15:51

@fansunion 用生成器生成 base model,生成后的 getter setter 方法都是驼峰形式的了

生成以后,绝大部分情况下你面对的都是驼峰形变量,例如模板中这样用:
#(shop.userId)

只有当你写 sql 查询的时候才要用与数据库字段一样的形式,例如:
dao.find("select user_id from shop where user_id = ?", userId);

2018-09-01 14:28

@hb963724769 还要检查一下 tomcat 下面的 lib 包中是否存在与你项目中重复的 jar 包,这里所指的重复是指项目重复,但版本不同

2018-09-01 13:01

补充一下,如果你的 jar 包已经安装到了本地 maven 库,先要删除它,然后通过 maven install 重新安装一次

2018-09-01 13:01

这个问题还是第一次碰到,挺奇怪的

NoClassDefFound 这个异常一般是 jar 文件版本冲突(例如,引入了不同版本的同一个项目的jar包),或者 class 文件被损坏,建议你 mvn clean 一下,然后重新编译 mvn compile

最后重新打包 mvn package

错误提示的那个 Controller 所在的 jar 包可能被损坏。 此外,要格外注意一下是不是有外部的程序在修改破坏你的 jar 包或者修改你的 WEB-INF/classes 下面的 class 文件

建议 tomcat 下的部署方式采用这种:
https://my.oschina.net/jfinal/blog/353062

最后,这个问题肯定是与 jfinal 无关的,是某种不明原因造成你的 jar/class 文件版本不对或者被损坏。 这种损坏是 jfinal 肯定干不了的事

2018-08-31 23:24

信息量不够,无法判断,cause 部分都没有