为什么这个代码在java Spring MVC中抛出ClassCastException

时间:2012-03-29 13:15:24

标签: java exception spring-mvc

我正在使用 Spring 2.5 MVC模块,我正在使用模板从数据库中重新获取数据并返回列表...在列表中我添加了bean对象,现在当我尝试从bean对象中检索显示ClassCastException

的值
  List listLogin = LoginDao.Authenticate(username,password);
  Iterator it = listLogin.iterator();
  while (it.hasNext()) 
  {
       Login  bean1= (Login) it.next(); //here it is showing classCastException 
       System.out.println(bean1.getClinicId());
  }

  public static List  Authenticate(String userName, String password) {
      List names = template.query("select clinicId from doc_user where userName='"+userName+"' and passwd='"+password+"'", 
           new RowMapper() {
               public Object mapRow(ResultSet resultSet, int i) throws SQLException 
               {
                    ArrayList lst = new ArrayList();
                    Login loginBean = new Login();
                    loginBean.setClinicId(String.valueOf(resultSet.getInt(1)));
                    lst.add(loginBean);
                    return lst;
                }
       });
       return names;
   }

1 个答案:

答案 0 :(得分:2)

那是因为返回的(Login) it.next()不是Login对象。你可以使用调试器和步骤槽,看看它返回什么,或者做穷人的版本并将其打印出来,看看它的回归:

while (it.hasNext()) 
  {
       Object  bean1=  it.next(); 
       System.out.println(bean1.getClass().getName());
  }

根据您的评论进行更新:

您知道这是返回一个包含登录对象列表的列表:

while (it.hasNext()) 
{
   List  list1 =  (List)it.next(); 
   for (Object bean : list1) {
       System.out.println(((Login)bean).getClinicId());
   }
}

我会说我认为你做错了,你的查询应该只是返回一个登录列表开始。因为看起来父列表中的ArrayList只包含一个对象所以你可能会这样做:

public static List  Authenticate(String userName, String password) {
      List names = template.query("select clinicId from doc_user where userName='"+userName+"' and passwd='"+password+"'", 
           new RowMapper() {
               public Object mapRow(ResultSet resultSet, int i) throws SQLException 
               {
                    Login loginBean = new Login();
                    loginBean.setClinicId(String.valueOf(resultSet.getInt(1)));
                    return loginBean ;
                }
       });
       return names;
}

然后使用您最初认为可行的代码处理它们:

List listLogin = LoginDao.Authenticate(username,password);

Iterator it = listLogin.iterator();
while (it.hasNext()) {
   Login  bean1= (Login) it.next(); 
   System.out.println(bean1.getClinicId());
}