Spring返回JSON时数据字段丢失

在实现一个权限管理系统过程中,用户登录后需要返回该用户可使用的接口地址。可是在返回数据中发少了一些信息。接下来直接看代码。
Spring返回JSON时数据字段丢失_第1张图片
简单的来说就是获取该表的所有信息。可是得到的结果却是这样的。。
Spring返回JSON时数据字段丢失_第2张图片

很明显只获取到了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 menu=userService.getMenu(user1);
        jsonObject.put("list", menu);
        jsonObject.put("result", 1);
        }else {
            jsonObject.put("msg", "用户名或密码错误");
            jsonObject.put("result", 0);
        }
        return jsonObject;
    }
public List 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来定位问题点
Spring返回JSON时数据字段丢失_第3张图片
Spring返回JSON时数据字段丢失_第4张图片
根据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一定要自动生成。

Spring返回JSON时数据字段丢失_第5张图片

总体上来说这本是一个小问题,但确实在解决过程中花费了大量时间,无论生活还是代码中的bug都应当冷静下来
分析问题,猜测问题原因,验证猜测,定位问题原因点,解决问题。

一个普通的程序员,有梦想,有生活,我在等待着那个她!Listening

你可能感兴趣的:(JAVA后端,springmvc)