springboot+ActiveRecord,反回json有问题

使用了ActiveRecord插件,生成了对应的Model类,有getter和setter方法,用的是fastjson包。调用接口关键代码如下:

String from = "from useryieldlog where userId = ? and type = ? ";

Page<Useryieldlog> page = this.useryieldlogService.findPage(param.getPageIndex(), 10, from, new Object[]{userId,param.getType()});

在这里得到的page,然后放到一个包装类里返回,客户端接收到的json如下:

{
    "code": 200,
    "msg": "成功",
    "data": {
        "list": [{
            "configName": null,
            "createTime": null,
            "modifyFlag": null,
            "attrs": {
                "msg": "推广",
                "id": 2463594159034862395,
                "type": 0,
                "userId": 2457130544639509501,
                "value": 1.71
            }
        }],
        "pageNumber": 1,
        "pageSize": 10,
        "totalPage": 1,
        "totalRow": 1,
        "firstPage": true,
        "lastPage": false
    }
}

不知道为什么,属性全部到了attrs的下面,感觉好像fastjson没起作用一样。请兄弟们不吝赐教!拜谢!

评论区

JFinal

2019-08-29 10:04

看一下 jfinal 的 Model.java 源码中的 getAttrs() 方法是不是存在?

如果存在的话,升级到新版本,新版本方法名添加了下划线,不会被 fastjson 处理 _getAttrs()

不过这个只能解释属性到了 attrs 下面的原因,不能解释为什么你生成的 getter 方法未被用在 json 转换之中

查看一下 Useryieldlog 的 base model , 是不是真的生成了合格的 getter 方法

lori

2019-08-29 12:05

已经升级到最新版本,看了Model是有下划线的_getAttrs():Map.getter方法仔细对照过,没问题。调试发现有调用,结果却还是一样。暂时的解决方法,在保存到包装类去的时候,预先使用JSONObject.toJSONString()转换成字符串,再返回前端就没错了。上诉问题具体原因,还待查。

JFinal

2019-08-29 12:09

@lori 如果希望用 fastjson 转换,需要配置:
me.setJsonFactory(new FastJsonFactory());

设置断点,看看转换流程走的是哪个类,这类问题很好查

出现 attrs 这个不太正常,一定要查出原因来,记得搞定后回来分享一下

快乐的蹦豆子

2019-08-29 12:24

https://www.jfinal.com/share/1405 设置下HttpMessageConverters 试试