У меня есть этот код, который я использую для входа в систему пользователя мобильного устройства, и для этого я проверяю некоторые данные, введенные пользователем, и надеюсь запросить таблицу, существует ли строка или нет. Я ожидал, что у меня будут проблемы с getSingleResult(), но не с getResultList.
Это код
//Mobile Login
@ResponseBody
@RequestMapping(value = { "/mobileloginbackend" }, method = RequestMethod.POST)
public String mobilelogin(@RequestParam String ssoId,@RequestParam String password) {
Session currentSession = sessionFactory.getCurrentSession();
@SuppressWarnings("rawtypes")
Query theQuery = currentSession.createSQLQuery("select password from accounts where sso_id=:name");
theQuery.setParameter("name", ssoId);
List list = theQuery.getResultList();
String stored_password = list.get(0).toString();
if (list.isEmpty()){
return "that user does not exist";
}
if (list.size() == 0){
return "that user does not exist";
}
if (passwordEncoder.matches(password,stored_password)){
return "successful login";
}
else{
return "wrong credentials";
}
}
Это две строки, которые дают исключение
if (list.isEmpty()){
return "that user does not exist";
}
if (list.size() == 0){
return "that user does not exist";
}
и я получаю ошибку 500 (внутренняя ошибка сервера).
Как я могу заставить это работать ?.
Вставьте трассировку стека




Если ваш список действительно пуст, вы не получаете ArrayIndexOutOfBoundsException из этой строки:
String stored_password = list.get(0).toString();
Вы должны сначала проверить, не пуст ли он, прежде чем пытаться получить первый элемент.
Кстати, делать if (list.isEmpty()) и if (list.size() == 0) абсолютно одинаково.
Я согласен, что они такие же, но также это String stored_password = list.get (0); это ошибка
Это наконец сработало для меня
//Mobile Login
//import javax.persistence.NoResultException;
@ResponseBody
@RequestMapping(value = { "/mobileloginbackend" }, method = RequestMethod.POST)
public String mobilelogin(@RequestParam String ssoId,@RequestParam String password) {
try {
Session currentSession = sessionFactory.getCurrentSession();
@SuppressWarnings("rawtypes")
Query theQuery = currentSession.createSQLQuery("select password from accounts where sso_id=:name");
theQuery.setParameter("name", ssoId);
String stored_password = theQuery.getSingleResult().toString();
if (passwordEncoder.matches(password,stored_password)){
return "successful login";
}
else{
return "wrong credentials";
}
}
catch (NoResultException e) {
return "That user does not exist.";
}
}
добавить трассировщик стека