前言
- 今天在实现点功能的时候,需要将mysql中的一个字段类型设置为json,使用的框架是ssm,mybatis的逆向工程返回相应的字段的类型是object,通过@responsebody注解传到前端的时候一直有错误。
错误
"shopGoods": {
"goodsId": 1,
"goodsName": "衣服1",
"shopAdminId": 1,
"goodsType": "衣服",
"goodsInfo": "我是衣服1",
"goodsDetail": "[{\"price\": 0, \"stock\": 0, \"property\": \"标配A\", \"goodsPayNum\": 10, \"goodsDetailStatus\": 0}, {\"price\": 10, \"stock\": 10, \"property\": \"标配B\", \"goodsPayNum\": 10, \"goodsDetailStatus\": 0}, {\"price\": 20, \"stock\": 20, \"property\": \"标配C\", \"goodsPayNum\": 10, \"goodsDetailStatus\": 0}, {\"price\": 30, \"stock\": 30, \"property\": \"标配D\", \"goodsPayNum\": 10, \"goodsDetailStatus\": 0}]",
"createTime": 1543229568000,
"modifiedTime": 1543233909000,
"goodsStatus": 1,
"isDel": 0
}
解决
public Object getGoodsDetail() {
// return this.goodsDetail;
return JSONArray.fromObject(this.goodsDetail);
}
"shopGoods": {
"goodsId": 1,
"goodsName": "衣服1",
"shopAdminId": 1,
"goodsType": "衣服",
"goodsInfo": "我是衣服1",
"goodsDetail": [{
"price": 0,
"stock": 0,
"property": "标配A",
"goodsPayNum": 10,
"goodsDetailStatus": 0
},
{
"price": 10,
"stock": 10,
"property": "标配B",
"goodsPayNum": 10,
"goodsDetailStatus": 0
},
{
"price": 20,
"stock": 20,
"property": "标配C",
"goodsPayNum": 10,
"goodsDetailStatus": 0
},
{
"price": 30,
"stock": 30,
"property": "标配D",
"goodsPayNum": 10,
"goodsDetailStatus": 0
}
],
"createTime": 1543229568000,
"modifiedTime": 1543233909000,
"goodsStatus": 1,
"isDel": 0
}
思考
- 我仔细看了一mybatis通过jdbc获得的字段并不是json类,而是一个object,应该获取到的不过是一个string的字符串而已(至于为什么需要弄一个json格式的字段,应该是传入以及修改的时候都判断是不是json格式的,有一个提醒功能),所以最终返回前端的时候goodsDetail对应的值应该是一个字符串而已,并不是一个json数组,这就造成了转意的时候需要加上/" ,所以解决的方法应该是将获取的object,转成json数组再返回个object(之所以最后还转成object是因为不转会报错,因为逆向工程生成xml已经一一对应,不想再改了)