Почему этот код вызывает исключение ClassCastException в Java Spring MVC - PullRequest
0 голосов
/ 29 марта 2012

Я работаю над Spring 2.5 MVC Module , я извлекаю данные из базы данных, используя шаблон, и он возвращает список ... В список я добавил объекты 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 Ответ

2 голосов
/ 29 марта 2012

Это было бы потому, что все, что возвращает (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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...