1. 程式人生 > >mysql欄位用json格式,mybatis框架,傳前端格式轉意問題

mysql欄位用json格式,mybatis框架,傳前端格式轉意問題

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已經一一對應,不想再改了)