• Почему не присваивается связь many to many?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Проблема вот, тут:

    public boolean saveUser(UserDto userDto) {
            User user = userRepository.findByUsername(userDto.getUsername());
            if (user != null) {
                return false;
            }
    
            user.setRoles(Collections.singleton(new Role(1L, "ROLE_USER")));
            user.setUsername(userDto.getUsername());
            user.setPassword(bCryptPasswordEncoder.encode(userDto.getPassword()));
            userRepository.save(user);
    
            return true;
        }


    Попробуйте так:
    public boolean saveUser(UserDto userDto) {
            User userFromDB = userRepository.findByUsername(userDto.getUsername());
            if (userFromDB != null) {
                return false;
            }
            User user = new User();
            user.setUsername(userDto.getUsername());
            user.setPassword(bCryptPasswordEncoder.encode(userDto.getPassword()));
            user.setRoles(Collections.singleton(new Role(1L, "ROLE_USER")));
            userRepository.save(user);
    
            return true;
        }


    Подробнее про ManyToMany
    https://vladmihalcea.com/the-best-way-to-use-the-m...

    У вас даже в idea подсвечивается потенциальная проблема
    61937f32c8b2f268382727.png
    Ответ написан
  • Как оптимально перебрать все возможные комбинации 4х массивов?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Не знаю, будет ли это полезно вам, но библиотека действительно есть (Apache Commons Math):
    CombinatoricsUtils.combinationsIterator()
    https://commons.apache.org/proper/commons-math/jav...
    Ответ написан
    Комментировать
  • Main не видит другие классы. Что добавить?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Ну во-первых, зачем вызывать статичный метод sendMsg() через экземпляр класса Jsoner? Вы можете обратиться к методу напрямую через Jsoner.sendMsg()
    Во-вторых,
    location: package неважно
    Важно. Так как название пакета должно соответствовать naming convention. Рекомендую открыть этот проект в Intellij IDEA и скорее всего она будет ругаться. Вполне возможно, что в названии директории есть недопустимые символы (например, тире или дефис).
    В-третьих,
    java -cp "$(printf %s: lib/*.jar)" ./src/неважно/Main.java

    Вот, ответ на ваш вопрос - https://stackoverflow.com/questions/219585/includi...
    Ответ написан
  • Какие лучшие курсы java 2021?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Скажу так: курсы нужны не для того, чтобы получать новые знания, а для того, чтобы более опытный разработчик мог указать вам на ваши ошибки. Также курсы полезны тем, что когда вы изучаете сами, то это может быть не систематично, другое дело, если вам приходится 2-3 раза в неделю посещать курсы (онлайн или оффлайн - не важно).
    Соответственно, можно даже не проходить курсы, а найти ментора (есть даже платные услуги менторов). За основу берите:
    1) учебники
    2) полезные статьи на habr, baeldung, medium и др
    3) туториалы на youtube, udemy, coursera и т.д. ( не бросайтесь тапками =) ). Это помогает быстро освоить что-либо, увидеть в работе фреймворк или еще что, но для получения академических знаний (см. пункт 1)
    Ответ написан
  • Почему не выходит запустить html файл в docker?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Вам томкат не нужен. Это дорого и неудобно.
    Вам нужен nginx.
    Прочитайте вот, эту статью:
    https://medium.com/code-to-express/https-medium-co...
    или вот эту:
    https://www.dailysmarty.com/posts/steps-for-deploy...
    Ответ написан
    Комментировать
  • Как использовать методы при @ManyToOne связи в рамках JpaRepository?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Вам просто необходимо вызвать метод void addArticleToAuthor(Article article)
    А в конце вызвать метод author.save()
    Вот, полезная ттатья по ManyToOne & OneToMany
    https://thorben-janssen.com/best-practices-many-on...
    https://www.baeldung.com/hibernate-one-to-many
    Ответ написан
    Комментировать
  • Как связать приложение на телефоне с сайтом на вордпресс?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Ну тут много нюансов, которые стоит уточнить...
    Во-первых, что за приложение? На чем оно написано, какие технологии использует? Например, Java/Kotlin, React Native или другие языки и фреймворки. Открывается ли сайт просто в WebView или есть интеграция с REST API самого сайта.
    Во-вторых, как быстро посты должны отобразиться в приложении? Можно периодически обращаться к сайту по REST и проверять наличие новых постов. Погуглите такую либу, как afrozaar wordpress rest api android. Если нужно обновлять статьи регулярно, то можно и сокеты подключить. Если периодически, то просто время от времени в фоне проверять наличие постов.

    Говоря проще, неважно на чем вы напишете приложение. Вам нужна либа для работы с Wordpress REST API. Либу для android/java/kotlin я указал выше. Для других языков/фреймворков можете погуглить
    Ответ написан
    3 комментария
  • Как применить Git?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Если речь идет именно о применении гита, то:
    - создайте репозиторий на гитхаб
    - залейте туда ваш проект
    - делайте коммиты, чтобы они были видны в репозитории git commit -m ""
    - добавляйте ваши комммиты на гитgit push
    - на другом устройстве сделайте git pull

    Если вы хотите сделать это используя синхронизацию, то можно попробовать например, облачное хранилице. Все ваши правки будут загружаться туда, а дальше синхронизироваться с другим устройством. Такая функция есть например, в pCloud.
    4qmkSxA.png

    Возможно, что есть более специализированные решения, но мне этих хватает.
    Ответ написан
    Комментировать
  • Консольная игра в Кости, как реализовать возможность выбора между выходом из игры и ее продолжением?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Внутри метода создается цикл while(), внутри которого слушаете ввод (Scanner) и если была введена нужная команда, то делаете System.exit(n)
    Ну и не забывайте обработать исключения, чтобы например, приложение не выходило на неправильной или несуществующей команде
    Ответ написан
  • Почему возникла ошибка Whitelabel?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Исходя из вашего прошлого вопроса прочитайте про - https://www.baeldung.com/spring-controller-vs-rest...

    @org.springframework.stereotype.Controller
    public class Controller {
        @GetMapping
        public String hello() {
            return "Hello";
        }
    }

    Подозреваю, что у вас нет шаблона с названием Hello, потому и ошибка. Вам нужно либо вернуть существующий шаблон, либо если это REST, то пометить RestController. Либо если уж решили использовать Controller, то добавьте к методу @ResponseBody
    Ответ написан
  • Почему вместо шаблона возвращается текст?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Добрый день!
    Неправильно:
    @RestController
    public class RegistrationController {


    Должно быть:
    @Controller
    public class RegistrationController {


    Прочитайте про:
    https://www.baeldung.com/spring-controller-vs-rest...

    Далее другая ошибка:
    у вас POST запрос убегает на registration
    А в контроллере:
    @PostMapping("/registrtion")
    Ответ написан
  • Как подсчитать письма с помощью Selenium/Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Ну ответ на ваш вопрос может сильно отличаться от почтового провайдера к почтовому провайдеру, ибо у них разный DOM и соответственно, будут нужны разные селекторы (xpath).
    Если простыми словами, то:
    - открыть браузер (можно в headless режиме)
    - найти узел, в котором представлен список писем
    - выбрать этот узел. В Selenium есть такой класс, как WebElement. Так как элементов несколько, то используйте List<WebElement>.
    - Так как у нас есть List вызываем метод size() и получаем кол-во элементов помещенных в список.

    И как правильно отметил коллега rst надо заставить подождать загрузки страницы. Прочитайте про Explicit & Implicit Waits
    Ответ написан
    Комментировать
  • Как Facebook идентифицирует приложение?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Нуу... в общем-то, когда вы добавляете ваше приложение в Facebook for Developers, то там генерируется appId. а когда ваше приложение обращается к facebook, то пересылает этот самый appid и токен. Вот и все.
    Или не об этом речь?

    Rd29PJg.png
    Ответ написан
  • Как сделать код в стиле MVC?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    public class Knight {
        private Ammunition[] ammunition;

    Наверное, вместо массива есть смысл использовать что-нибудь из jcf. Например, List.

    Что такое MVC - model, view, controller

    Controller
    Создайте несколько контроллеров. Например. MenuController, внутри которого будут методы выводящие меню и другие методы для работы с меню

    throw new UnsupportedOperationException("You need to implement this method");

    Если вы хотите, чтобы пользователь имплементировал данный метод, то вместо выбрасывания исключения можно использовать абстрактный класс, а тело метода оставить пустым. Ну или же использовать интерфейс.

    Model
    В данном случае у вас есть необходимые модели (сущности). Например, Knight, Ammunition

    View
    Ну тут уже можно например, для красоты подключить либу AsciiTable и выводить элементы меню в виде красивой таблицы или например, добавить прогресс бар в консольное приложение и т.д.
    Ответ написан
    3 комментария
  • Что нужно изучить чтобы писать красивые приложения под Android?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    что нужно изучить чтобы писать красивые UI-приложения?

    Ну с учетом того, что художник пишет свои картины, то вам нужно изучить UX/UI дизайн.

    Но если все-таки желаете разрабатывать приложения для Android, то начать изучение стоит с Kotlin / Java. А затем прочитать про Gradle. Потом познакомиться с Android. А вопрос насчет UI оставить дизайнеру. Пускай, у него голова болит, как надо красиво нарисовать кнопочки, ибо ваше дело разработка))
    Ответ написан
    Комментировать
  • Как правильно отпарсить веб-страницу через Jsoup?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Как и отметил коллега Сергей Горностаев контент данной страницы формируется динамически. Соответственно, jsoup не подойдет.
    Вам необходимо выполнить GET запрос на урл REST сервиса и получить json, который потом необходимо будет распарсить.
    Откройте консоль браузера и перейдите на вкладку "Сеть". В фильтрах выберите XHR и изучите запросы.
    Увидете вот, такой урл:
    https://www.stoloto.ru/p/api/mobile/api/v34/service/draws/archive?count=10&game=keno2

    А в ответ прибегает json с веткой draws.

    При помощи либы или онлайн сервиса json2pojo создайте pojo и используя (gson, DomParser или jackson) спарсите этот json.

    jsoup тут не нужен.
    Можно еще спарсить страницу при помощи selenium (управляя браузером), но как по мне это плохое решение.
    Ответ написан
    Комментировать
  • Что лучше выучить, Java или C#?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Язык является инструментом. Важны ваши навыки, как разработчика (алгоритмы, структуры данных, понимание tcp/ip и т.д.)
    Что касается выбора языка, то ориентируйтесь на:
    - что вы собираетесь на нем делать и кем планируете работать. Если например, речь о геймдеве, то конечно же C# (Unity) или C++. И тут Java ну никак... хоть и позволяет писать игры. Если enterprise, то да, тут уже можно выбирать между Java & C#.
    - ориентируйтесь на то, где вы планируете работать. Возможно, что вы в результате вашего исследования поймете, что Java популярнее C# (или наоборот), но на деле окажется, что в вашей стране/городе она вовсе не популярна. Соответственно, посмотрите какие компании есть у вас в городе (если планируете работать офлайн) и изучите их стек.
    Ну и конечно же пробуйте. Я например, пока дошел до Java, успел попробовать PHP & JavaScript. В любом случае, когда вы станете востребованным и опытным специалистом, то уже будете владеть несоклькими языками.
    Ответ написан
    Комментировать
  • Почему у строк всегда одиноковый hashcode()?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Вот, ответ на ваш вопрос:
    https://www.baeldung.com/java-string-immutable
    Why_String_Is_Immutable_In_Java.jpg
    Ответ написан
  • В массиве слов найти слово состоящее только из цифр. Если таких слов несколько, найти второе из них?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    В массиве слов найти слова состоящие только из цифр.

    Вот, одно из возможных решений задачи:
    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
    
        public static void main(String[] args) {
            String[] words = new String[]{"qqqqqqqqqqwe", "qwer", "123", "4321"};
            char a = 'a';
            StringProcessor stringProcessor = new StringProcessor();
            List<String> wordsContainingOnlyDigits = stringProcessor.findWordsContainingDigits(words);
            wordsContainingOnlyDigits.forEach(System.out::println);
        }
    
    }
    
    class StringProcessor {
    
        /**
         * Метод находит слова, которые состоят только из цифр
         * @param words массив слов
         * @return список слов, состоящих из цифр
         */
        public List<String> findWordsContainingDigits(String[] words) {
            List<String> wordsContainingOnlyDigits = new ArrayList<>();
            // Итерируем по массиву слов
            for (String word : words) {
                // получаем массив символов из слова
                char[] wordChars = word.toCharArray();
                // Boolean[] isDigits = new Boolean[wordChars.length];
                boolean[] isDigits = new boolean[wordChars.length];
                // итерируем по массиву символов
                for (int i = 0; i < wordChars.length; i++) {
                    char currentChar = wordChars[i];
                    // проверяем является ли символ цифрой
                    if (Character.isDigit(currentChar)) {
                        isDigits[i] = true;
                    } else {
                        // если нет, то проверяем следующее слово
                        break;
                    }
                }
                // если все значения isDigits true, то значит слово состоит из цифр
                if (areAllTrue(isDigits)) {
                    // добавляем слово в список
                    wordsContainingOnlyDigits.add(word);
                }
            }
            return wordsContainingOnlyDigits;
        }
    
        /**
         * Метод проверяет boolean массив на истинность
         * @param array boolean массив
         * @return boolean
         */
        private static boolean areAllTrue(boolean[] array)
        {
            for(boolean b : array) if(!b) return false;
            return true;
        }
    }


    Если таких слов несколько, найти второе из них?

    Не совсем понятно, что является "вторым из них".

    Что касается вашего кода, то:
    зачем конвертировать строку в строку и затем доставать массив символов
    char[] chars = String.valueOf(element).toCharArray();

    можно же:
    char[] chars = element.toCharArray();

    тут итерция неверная:
    for (int i = 0; i < chars.length - 1; i++) {
    либо так: i < chars.length; либо так: i <= chars.length - 1;

    для проверки является ли символ цифрой есть метод Character.isDigit()
    Ответ написан
    5 комментариев