mysql欄位用json格式,mybatis框架,傳前端格式轉意問題
阿新 • • 發佈:2018-12-08
a
前言
- 今天在實現點功能的時候,需要將mysql中的一個欄位型別設定為json,使用的框架是ssm,mybatis的逆向工程返回相應的欄位的型別是object,通過@responsebody註解傳到前端的時候一直有錯誤。
錯誤
- json如下
"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 }
- 一直有一個/在,應該是為了轉意。
解決
- 將對應的get方法改為如下
public Object getGoodsDetail() {
// return this.goodsDetail;
return JSONArray.fromObject(this.goodsDetail);
}
- 正確返回json
"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已經一一對應,不想再改了)