FastJson.getJson().toJson为什么会请求数据库

使用fastJson报错


不知道为什么FastJson.getJson().toJson会请求数据库

代码出错内容

首先先打出查询数据库,然后进入报错死循环。

image.png

2019-07-10 at 13:18:18 CST ERROR com.yiww.fw.log.Log4j2Log 49 error - write javaBean error, fastjson version 1.2.41, class com.yiww.backend.business.model.Adpage, fieldName : 0, write javaBean error, fastjson version 1.2.41, class com.yiww.backend.business.model.Adpage, fieldName : 0, write javaBean error, fastjson version 1.2.41, class com.yiww.backend.business.model.Adpage, fieldName : 0, write javaBean error, fastjson version 1.2.41, class 

image.png



代码:

image.png

image.png


sql脚本

image.png



评论区

牛打下

2019-07-10 13:32

public Page statisticsList(Integer pageNumber, Integer pageSize, Kv cond) {
Page page = getPage(pageNumber, pageSize, cond, adpageDao, "mariketing.statisticsList");
List list = page.getList();
ArrayList arrayList = new ArrayList<>();
for (Adpage adpage : list) {
String json = JsonKit.toJson(adpage);
Map map = (Map) JSON.parse(json);
String countStr = (String) map.get("count");
if (StrKit.isBlank(countStr)) {
countStr = "{}";
}
OpenCount openCount = JSON.parseObject(countStr, OpenCount.class);
map.put("count", openCount);
arrayList.add(map);
}

Page page2 = new Page(arrayList, page.getPageNumber(), page.getPageSize(), page.getTotalPage(), page.getTotalRow());
return page2;
}

牛打下

2019-07-10 13:33

@牛打下 如果我的service把model转成Map就不会出现死循环的问题。

杜福忠

2019-07-10 13:43

不要在Model里面写 getXxx() { 数据库查询的操作 } 就可以了,
JF不推荐在Model里面写各种SQL的查询 ,
如果是老项目啥的不能改变, 可以改个名字叫 findByXX(){ xx } 不要叫 get开头就好, 你可以读读FastJson的源码就知道咋回事了

JFinal

2019-07-10 16:05

@牛打下 FastJson.getJson().toJson(...) 会调用 model 中的 getter 方法获取数据再进行转换,而你的 getter 方法中有查询数据库的操作,所以自然而然就会查询数据库了,正常流程而已

数据库查询写在业务层,不要写在 model 中, 让 model 只去承载数据