Spring исключения getSingleResult () и getResultList () при использовании createSQLQuery

У меня есть этот код, который я использую для входа в систему пользователя мобильного устройства, и для этого я проверяю некоторые данные, введенные пользователем, и надеюсь запросить таблицу, существует ли строка или нет. Я ожидал, что у меня будут проблемы с 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 (внутренняя ошибка сервера).

Как я могу заставить это работать ?.

добавить трассировщик стека

Wilder Valera 05.04.2018 17:01

Вставьте трассировку стека

Yogi 05.04.2018 17:45
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
150
2

Ответы 2

Если ваш список действительно пуст, вы не получаете ArrayIndexOutOfBoundsException из этой строки:

String stored_password = list.get(0).toString();

Вы должны сначала проверить, не пуст ли он, прежде чем пытаться получить первый элемент.

Кстати, делать if (list.isEmpty()) и if (list.size() == 0) абсолютно одинаково.

Я согласен, что они такие же, но также это String stored_password = list.get (0); это ошибка

Gandalf 05.04.2018 17:14

Это наконец сработало для меня

        //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.";
         }

        }

Другие вопросы по теме