• Почему вместо шаблона возвращается текст?

    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 комментариев
  • Можно ли сделать динамическое добавление WebAPI?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Не знаю поможет ли вам это, но нужный вам функционал есть в составе Spring Cloud.
    Вам нужно следующее:
    - Spring Configuration Server, который стартует первым и подгружает конфигурации для других микросервисов.
    - (Разумеется, что вам также понадобятся Eureka Server & Spring Gateway API)
    - Далее вам необходимо добавить Spring Cloud Bus, который динамически обновляет конфиги.
    Потом происходит примерно следующее:
    Вы заливаете ваши новые конфиги либо в гит репозиторий, либо локально. При наличии новой конфигурации они доставляются через AMQР к соответствующему микросервису.
    KHtD0FG.png
    Ответ написан
    Комментировать
  • CRUD spring+hibernate: передача json и обработка на сервере?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    По-первых, для реализации вашей задачи вам необходимо обратить внимание на паттерно DTO (data to object).
    Также, если у вас приложение на Spring, то можете подключить мапперы для удобства маппинга (конвертации) dto -> entity (и наоборот). Можете использовать такие либы, как modelMapper, MapStruct.
    Если не хотите использовать либу, то имплементируйте интерфейс Converter<S,T>

    Оптимальность, чтобы не надо было передавать лишних полей, если они не заносятся в таблицу или автогенерируются

    Вы можете на клиентской стороне средствами js проверить поля объекта на null и в случае оного просто не передавать это поле. Ну или же можно передать это поле и проверить на null & empty уже на серверной стороне.

    В JSON в поле one-to-many (например при создании юзера у него будут животные) чтобы передавался только массив idшников животных, а не полностью вся информация о них (частично пересекается с первым пунктом - оптимальность)

    Чтобы передать id животного/ных из фронта необходимо, чтобы они были в БД. Если животные добавляются раньше пользователя, то достаточно при получении dto для user (в утильном классе Converter) найти животных по переданным id и назанчить этих животных юзеру через setPets()или метод addPet()
    Ответ написан
    Комментировать
  • Как собрать с помощью maven ТОЛЬКО тесты?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Первое. что попадается на глаза - <pluginManagement>. Ваши плагины внутри этого тега. Этот тег позволяет управлять указанными плагинами внутри модулей, но если вы хотите, чтобы они были применены к текущему проекту, то вытащите плагины из этого плагина.
    В конфигах плагина maven-assembly-plugin пропишите это и укажите ваш класс
    <archive>
            <manifest>
              <mainClass>com.example.Main</mainClass>
            </manifest>
          </archive>


    А вообще, если хотите настроить fat jar, то лучше использовать - maven shade plugin
    https://stackoverflow.com/questions/16222748/build...
    Ответ написан
  • Как преобразовать строку в несколько чисел?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Используйте метод split() и разделите строку используя запятую. Получите массив подстрок, преобразуйте их в нужный формат (например, int) и все.
    Ответ написан
    Комментировать
  • Как сохранить страницу http на пк selenium java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Как сохранить страницу http на пк selenium java?

    Мне кажется, что вы пошли не тем путем и притом извращенным путем.
    Во-первых, зачем вам для сохранения страницы запускать браузер, использовать selenium и т.д? Это затратно в плане времени и в плане памяти.
    Можно выполнить get запрос на сервер и получить массив байтов самой страницы, сохранить ее.
    www.java2s.com/Tutorial/Java/0320__Network/SaveWeb...
    https://stackoverflow.com/questions/17440236/getti...

    Ну или на худой конец, используйте либу jsoup.
    Вот, пару строк:
    public void downloadPage() throws Exception {
            final Response response = Jsoup.connect("http://www.example.net").execute();
            final Document doc = response.parse();
    
            final File f = new File("filename.html");
            FileUtils.writeStringToFile(f, doc.outerHtml(), StandardCharsets.UTF_8);
        }


    Источник - https://stackoverflow.com/questions/24696766/how-t...
    Ответ написан
    Комментировать
  • Почему Spring boot secure login выдает ошибку 404?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Добрый день.
    Могу предположить следующие причины:
    1) либо у вас нет шаблона login.html в /resources/templates/
    2) либо запрос не доходит до /login, так как:
    .antMatchers("/").permitAll()
     .anyRequest().authenticated()

    Вы разрешили доступ без аутентификации только к главной странице. А форма авторизации лежит по пути /login
    Ответ написан
  • Как запустить сервлет?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Ну можете для начала попробовать проверить context path. Скорее всего проблема именно в этом.
    Т.е. например, вы пытаетесь открыть урл localhost:8080/, а надо localhost:8080/customPath
    Скорее всего вы столкнулись именно с этим.
    Ответ написан
  • Spring mvc tomcat 404 в чем ошибка?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Могу предположить, что вы некорректно настроили томкат. В настройках вашего IDE необходимо указать context path.
    А затем обращаться к вашему приложению примерно так:
    localhost:8080/myPath/hello-world
    Ответ написан
    Комментировать
  • Почему не удалось получить экземпляр FirebaseDatabase?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Во-первых, ответ легко находится поисковиком.
    Во-вторых, там же написана причина ошибки:
    Failed to get FirebaseDatabase instance: Specify DatabaseURL within FirebaseApp or from your getInstance() call.

    Вот, например:
    https://stackoverflow.com/questions/47730910/faile...
    Ответ написан
    Комментировать