jfinal返回json数据的问题

话不多说,代码先上

1  config配置

image.png

配置中 我添加了JsonFactory的处理类:    me.setJsonFactory(new JacksonFactory());

2 返回结果

     controller内的处理细节

image.png

    返回数据工具类内的处理细节,本方法将 Page类作为object对象传递给了renderJson方法。

image.png

3 ajax的请求结果

image.png

ajax中的list有 columnNames字段和columnValues字段,在不不指定json处理类的时候返回的结果如下:

4  非指定json处理类的配置

image.png

5  非指定下的ajax的数据返回结果

image.png

-------------------------------

指定Json处理的工具类之后,返回的json数据格式与不指定json处理工具类时json数据格式不一致。







评论区

JFinal

2017-08-02 15:57

你应该是用了 Db + Record 模式,对于 Record 对象转 json, 使用 jfinal 自己的 json 转换类可以识别,而 fastjson jackson 对于 record 的转换,是先调用了其 getColumns() 得到 map 后进行的转换

建议尽量使用生成了 getter 方法的 Model 再进行转换,jackson 与 fastjson 会根据它的 getter 方法进行转换

多种转换方式可以自由搭配:
1:使用 jfinal 自己的转换工具 JFinalJson.getJson().toJson(...)
2:使用 jackson 工具 Jackson.getJson().toJson(...)

最后再通过 renderJson(jsonString) 进行输出,因为 renderJson 是可以直接认 String 参数的

me.setJsonFactory(...) 是配置默认 json 转换工具,在此基础上仍然可以灵活搭配来使用,此外, jfinal 还提供了一个 MixedJsonFactory 可以让转 json 时使用 jfinal 实现,而 parse 时使用 fastjson 实现

长发飘飘的秃顶

2018-03-21 10:40

renderJson()无法将我在生成的model中添加自定义的get方法的字段转换出来,该如何解决?

JFinal

2018-03-21 10:46

@长发飘飘的秃顶 如果你用的 jfinal 默认的 json 实现,需要将添加的自定义属性值通过 model.put(...) 放入 model 的 attrs 属性中,因为 jfinal 默认的 json 实现是对 attrs 属性进行 json 转换,不是根据 getter 方法

如果希望根据 getter 方法来转换,可以用一下jfinal 集成的 fastjson,有两种用法:
1:临时使用:FastJson.getJson().toJson(...);
2:设置为默认实现,一直使用: me.setJsonFactory(new FastJsonFactory());

建议使用 jfinal 的生成器生成 model 的 getter setter 方法,然后使用 fastjson

长发飘飘的秃顶

2018-03-21 11:06

@JFinal 回答真是快,真的解决了,十分感谢。

木易hg

2018-03-21 11:09

public static JSONArray JsonArray(List list){
JSONArray jsonArray = new JSONArray();
for (Record record : list) {
jsonArray.add(jsonObject(record));
}
return jsonArray;
}

public static JSONObject jsonObject(Record record){
JSONObject jo1 = (JSONObject) JSON.toJSON(record.getColumns());
return jo1;
}

flash866

2018-11-21 12:04

mark下

farce

2019-11-21 18:51

使用JFinalJson.getJson().toJson(record.getList())方法时,JSONObject要使用net.sf.json就不会出现把record.getList()变成字符串,jsonObject.put就是JsonObject

热门反馈

扫码入社