1. 程式人生 > >Spring返回JSON時資料欄位丟失

Spring返回JSON時資料欄位丟失

在實現一個許可權管理系統過程中,使用者登入後需要返回該使用者可使用的介面地址。可是在返回資料中發少了一些資訊。接下來直接看程式碼。
這裡寫圖片描述
簡單的來說就是獲取該表的所有資訊。可是得到的結果卻是這樣的。。
這裡寫圖片描述

很明顯只獲取到了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