在实现一个权限管理系统过程中,用户登录后需要返回该用户可使用的接口地址。可是在返回数据中发少了一些信息。接下来直接看代码。
简单的来说就是获取该表的所有信息。可是得到的结果却是这样的。。
很明显只获取到了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来定位问题点
根据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