Spring返回JSON時資料欄位丟失
阿新 • • 發佈:2019-01-29
在實現一個許可權管理系統過程中,使用者登入後需要返回該使用者可使用的介面地址。可是在返回資料中發少了一些資訊。接下來直接看程式碼。
簡單的來說就是獲取該表的所有資訊。可是得到的結果卻是這樣的。。
很明顯只獲取到了id,並沒有得到outlink欄位資訊。接下來檢查了一遍程式碼
@RequestMapping(value = "/login",method=RequestMethod.POST)
@ResponseBody
public Object login(HttpServletRequest request,String username,String password) {
JSONObject jsonObject = new JSONObject();
UserBean user=new UserBean();
user.setUsername(username);
user.setPassword(password);
UserBean user1=userService.loginService(user);
if(user1!=null) {
request.getSession().setAttribute("user", user1);
List<MenuBean> menu=userService.getMenu(user1);
jsonObject.put("list" , menu);
jsonObject.put("result", 1);
}else {
jsonObject.put("msg", "使用者名稱或密碼錯誤");
jsonObject.put("result", 0);
}
return jsonObject;
}
public List<MenuBean> getMenu(UserBean user){
SqlSession sqlsession=sqlSessionFactory.openSession();
try {
UserDAO mapper=sqlsession.getMapper(UserDAO.class);
return mapper.getMenu(user);
}catch (Exception e) {
// TODO: handle exception
System.out.print(e.getMessage());
return null;
}finally {
sqlsession.close();
}
}
<select id="getMenu" parameterType="com.jc.Bean.UserBean" resultMap="Menu">
select c.* from user as a ,p_m as b ,menu as c where a.p_id=b.p_id and b.m_id=c.id and a.id=#{id}
</select>
import javax.persistence.Column;
import javax.persistence.Table;
@Table(name="menu")
public class MenuBean {
@Column(name="id")
private Integer id;
@Column(name="outlink")
private String outlink;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getoutlink() {
return outlink;
}
public void setoutlink(String outlink) {
this.outlink = outlink;
}
}
瀏覽了一邊相關的程式碼部分並沒有發現哪裡有問題。思考了一下可會會有幾種情況
(1)沒有從資料庫獲取到outlink資訊;
(2)獲取到沒有放入到JSONObject中;
(3)正確放入到json物件中但返回過程中丟失
接下來就嘗試開啟debug來定位問題點
根據bedug結果排除兩種可能,定位問題造成的原因在返回的過程中。經過查閱得知,json物件在返回過程中是去呼叫JavaBean中的get方法來獲取資料並返回的,那麼猜測問題應該就是在Bean中,細心的檢查了一下發現了問題點
public String getoutlink() {
return outlink;
}
public void setoutlink(String outlink) {
this.outlink = outlink;
}
原來是在修改欄位變數時我手動修改的get/set導致格式不正確變數名首字母應該大寫,修改後
public String getOutlink() {
return outlink;
}
public void setOutlink(String outlink) {
this.outlink = outlink;
}
再次嘗試發現問題解決,由於不細心引起的小問題而導致花費了大量時間,所以總結出來一條經驗無論是建立Bean還是修改Bean裡的變數名get/set一定要自動生成。
總體上來說這本是一個小問題,但確實在解決過程中花費了大量時間,無論生活還是程式碼中的bug都應當冷靜下來
分析問題,猜測問題原因,驗證猜測,定位問題原因點,解決問題。
一個普通的程式設計師,有夢想,有生活,我在等待著那個她!Listening