背景瞭解:後臺用java寫的,ssm框架,前端vue,前端請求後臺報以下錯誤
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'user_id' in 'class java.lang.String'
大概意思是:在“class java.lang.String”中沒有名爲“user_id”的屬性的getter
錯誤分析:
Mybatis默認採用ONGL解析參數,所以會自動採用對象樹的形式取string.num值,引起錯誤。
我代碼報錯的原因我傳遞的參數是String類型,在SQL語句中進行判斷的時候要把<if>裏user_id這個參數改成_parameter 。
相關代碼如下:
前端請求代碼
let url = {
piedata: 'http://' + http.host_port + '/piedata'
}
//動態渲染餅狀圖
fillPieChart() {
var _this = this;
let para='';
para={user_id:JSON.parse(sessionStorage.getItem("user")).id};
this.$post(url.piedata,para)
.then(res => {
if(res != null) {
} else {
}
});
}
後臺controller代碼
//主頁餅狀圖獲取數據
@PostMapping(value = "/piedata")
@ResponseBody
public JSONArray pieData(@RequestBody Map<String,String> para){
JSONArray json = new JSONArray();
json = checkRuleService.getPieData(para.get("user_id"));
return json;
}
}
mapper.xml代碼
<select id="getPieData" resultType="CheckRule">
select sa.app_name app_name,COUNT(*) as count
from tb_checkrules r
left join system_app sa ON r.app_id = sa.id
where <if test="user_id!=null">user_id=#{user_id}</if>
group by sa.app_name
</select>
解決辦法:where <if test="user_id!=null">user_id=#{user_id}</if>改成
where <if test="_parameter !=null">user_id=#{user_id}</if>
可能還有其他更好的解決辦法,歡迎大家留言交流,共同進步