Ответы пользователя по тегу Java
  • Как soap-запрос сконвертировать в pojo?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Прочитайте статью по ссылке:
    https://www.baeldung.com/spring-boot-soap-web-service
    Обратите внимание на пункт:
    Generate the Domain Java Classes
    Ответ написан
    Комментировать
  • Как разделить логику внутри метода?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Если вы установите Sonarlint, то наверняка он пожалуется на то, что ваш метод можно упростить.
    Также обратите внимание на то, что 1 метод должен отвечать за 1 функционал.
    Если у вас в названии метода есть например, ключевое слово And, то как минимум ваш метод можно разделить на 2 метода. На сайте refactoring.gugu есть неплохой видеокурс и книга по clean code. Но наверное, все же стоит обратиться к более академическим источникам.

    Вот, эту строку можно вынести в отдельный метод:
    Optional<User> user = userRepositoyry.findById(id)
    Например,
    public User findUserById(Long id) {
    	userRepository.findById(id)
    	.orElseThrow(ResourceNotFoundException::new);
    }


    // Запись файлов для необходимой логики, логирование, обработка входных и выходных данных и т.д.

    Логирование

    Наверное, не самая лучшая идея с точки зрения простоты реализации, но можно использовать возможности AOP для логирования. Например, если вы используете Spring, то вы можете использовать Spring AOP (before, after, around, afterReturn)
    Обработку входных и выходных данных можно вынести в отдельные приватные методы.

    Не видя полную задачу сложно что-либо еще объективно сказать. Что касается паттерна Chain of Responsibility, то на мой взгляд он вам тут не поможет.
    Ответ написан
    Комментировать
  • Что лучше начать учить Kotlin или Java если вообще нет опыта в IT?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Пожалуй, язык стоит изучить в соответствии с вашими пожеланиями.
    Если вы хотите податься в enterprise, то лучше Java, но и на Kotline сможете найти работу.
    Если речь идет об android разработке, то лучше Kotlin, но и на Java скорее всего вы найдете работу. Хотя в данном случае лучше для моб. разработки изучите Kotlin.
    Для gamedev-a не стоит изучать ни тот, ни другой. Возможно, C# (Unity), C, C++ будут более годными.
    Для e-commerce python, ruby, php, javascript.
    Если душа лежит во фронт. то есть смысл изучить javascript или typescript (в любое случае владеть js нужно будет).
    Ответ написан
  • Как натянуть frontend (React + JS) на backend (Java + Spring)?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Ну натягивать точно ничего не стоит)
    Что касается вашего вопроса, то в backend должен быть написать RESTful сервис (API).
    В отличие от работы с шаблонизаторами (thymeleaf, mustache) фронт-энд является отдельным приложением, которое не связано с бэк-эндом. Т.е. абсолютно все равно на чем написан бэк будь то Spring, Django и т.д.
    Соответственно. когда у вас будет готов REST сервис, то вы можете приступать к разработке фронта.
    Чтобы разработать сервис на Spring можете начать с изучения аннотации @RestController
    https://www.baeldung.com/spring-controller-vs-rest...
    Вы также можете воспользоваться возможностями Spring Data REST, который сам сгенерирует необходимые эндпоинты с поддержкой HATEOAS.
    https://www.baeldung.com/spring-data-rest-intro

    Что касается React, то:
    https://www.youtube.com/watch?v=GNrdg3PzpJQ
    гуглим
    Ответ написан
    Комментировать
  • Как можно упростить этот java код?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день. А можно ли узнать вашу конечную цель? Что вы пытаетесь реализовать?
    Код действительно можно сократить, а то и лучше улучшить восприятие.
    1) создайте 2 метода, первый из которых будет читать файл, а второй писать в файл. Можно воспользоваться возможностями класса Files из Java 8
    2)
    String match1 = sc.nextLine();
            String match2 = sc.nextLine();
            String match3 = sc.nextLine();
            String match4 = sc.nextLine();
            
            String scMatch1[] = match1.split(" ");
            String scMatch2[] = match2.split(" ");
            String scMatch3[] = match3.split(" ");
            String scMatch4[] = match4.split(" ");
    
            int a1 = Integer.parseInt(scMatch1[0]);
            int a2 = Integer.parseInt(scMatch2[0]);
            int a3 = Integer.parseInt(scMatch3[0]);
            int a4 = Integer.parseInt(scMatch4[0]);
    
            int b1 = Integer.parseInt(scMatch1[1]);
            int b2 = Integer.parseInt(scMatch2[1]);
            int b3 = Integer.parseInt(scMatch3[1]);
            int b4 = Integer.parseInt(scMatch4[1]);

    тут происходит что-то странное. Скорее всего тут есть ошибка.
    Вы сперва читаете строку, затем разделяете ее пробелом в массив строк, но потом почему-то присваиваете a1, а2. а3. а4 одно и то же число.
    int a1 = Integer.parseInt(scMatch1[0]);
            int a2 = Integer.parseInt(scMatch2[0]);
            int a3 = Integer.parseInt(scMatch3[0]);
            int a4 = Integer.parseInt(scMatch4[0]);

    скорее всего должно быть так:
    int a1 = Integer.parseInt(scMatch1[0]);
            int a2 = Integer.parseInt(scMatch2[1]);
            int a3 = Integer.parseInt(scMatch3[2]);
            int a4 = Integer.parseInt(scMatch4[3]);

    Такая же ситуация с перемеными b1, b2, b3, b4.
    А что если человек введет не 4 элемента через пробел, а 5 и более? Или наоборот менее 4-х элементов?

    Подобные выражения a1+a2+a3+a4 > b1+b2+b3+b4 с точки зрения clean code можно вынести в отдельную переменную типа boolean.
    Например,
    boolean isSumAGreaterThanSumB = a1+a2+a3+a4 > b1+b2+b3+b4;

    Ну а далее if (isSumAGreaterThanSumB ) { ... }
    Ответ написан
    Комментировать
  • Как работать с WSDL SOAP в Spring?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Есть хорошая статья по вашему вопросу:
    https://www.baeldung.com/spring-soap-web-service
    Не читали случайно?
    Ответ написан
    Комментировать
  • Android разработка на Java в Sublime Text?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Давайте, рассмотрим варианты, которые у нас имеются:
    Вы можете использовать Sublime Text 3 для Java разработки. Скажу, что как начинающему разработчику будет чуть сложнее подготовить рабочее пространство под android, с учетом того, что вам нужно скачать различные sdk, установить gradle и т.д.
    Вам понадобится:
    Android SDK Command line tools - https://developer.android.com/studio#downloads
    Sublime Text 3 или 4
    Плагин для Sublime Text 3. Например, Javatar или Andrew
    Gradle (для удобства можно использовать https://sdkman.io/install )
    В качестве OS - с учетом железа можно взять Linux, так как он легче, чем остальные

    В качестве альтернативы можете рассмотреть OSS (Visual Studio Code)
    Вот, минимальные требования для него - https://code.visualstudio.com/docs/supporting/requ...

    Можно попробовать кое-что другое еще...
    Изучить javascript & React Native и писать кросплатформенные приложения на нем. Но что по ресурсам не подскажу.
    Ответ написан
    2 комментария
  • Как скачать файлы по URL?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Итерируете по массиву и для каждой ссылки проводите действие указанное по ссылке ниже. Выбор вариантов скачивания огромен
    https://www.baeldung.com/java-download-file
    Ответ написан
    Комментировать
  • Как эффективно освоить backend-разработку на Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Один мой коллега заявил, что если учить программирование само по себе — по книгам/документации, — то это потеря времени впустую. Нужно делать какой-то проект. У меня такой вопрос: а какой проект можно сделать, если только начал изучать программирование и понятие не имеешь что писать?


    Чтобы знать, что писать - надо знать, как писать. А значит, для начала ты должен овладеть теорией. Хорошо, когда изучая теорию ты попутно учишься писать код. До написания pet project я бы рекомендовал изучить еще исходные коды различных проектов коллег поопытнее. Найти их можно на github, bitbucket и т.д.

    Итак, подведем итог:
    1) изучить теорию
    2) попутно стараться решать задачи на различных сайтах (hackerrank, leetcode и др.)
    3) когда овладеете базовыми навыками, то изучать различные паттерны и подходы. KISS, YAGNI, GRASP, SOLID, GoF, DTO, DAO и т.д.
    4) написать свой pet project.
    Ответ написан
  • С помощью каких фреймоворков создают мобильные приложения на Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Подскажите, с помощью каких фреймоворков создают мобильные и десктоп приложения на Java?

    Добрый день.
    Десктоп - платформа JavaFX. Остальные старые либы, но используются и по сей день. Например, swt, awt, Swing
    Мобайл - на Java пишут нативно под андроид используя Android SDK.
    Под iOS есть вроде бы Multi-OS Engine - https://multi-os-engine.org/ , но я сам никогда его не использовал.
    Если хотите кросплатформенно писать мобайл приложения, то смотрите в сторону React Native (javascript, typescript) или Flutter (Dart). Ну и изучив js можно писать десктоп на ElektonJS
    Ответ написан
    2 комментария
  • Как найти итоговые поступления каждого маршрута за 7 дней?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Это тестовое задагние или реальный проект?
    На всякий случай отмечу, что если вы оперируете с валютой, то для высокой точности стоит использовать тип данных BigDecimal вместо примитивов. Тип данных int тем более не подойдет, так как могут быть не только целые значения.

    Транспортная компания осуществляет работу 10 маршрутов городских автобусов. В конце каждого дня регистрируется выручка по каждому из маршрутов, а в конце недели составляется итоговый отчёт.
    Напишите класс, который моделирует сбор соответствующей информации и выводит на экран итоговые недельные поступления от каждого из 10 маршрутов.

    Предположу, что это тестовое задание или домашка и потому вместо ответа дам вам несколько подсказок.
    1) Создайте класс, который хранит в себе информацию по каждому из маршрутов. Приведу простой пример. Можно учесть много аспектов например, дату и т.д., но не будем.
    Например, (псевдокод):
    class Route {
        int busNum;
        Map<DayOfWeek, BigDecimal> incomePerDay;
    }

    далее вы можете создать массив или использовать jcf для хранения данных.
    Не будем морочиться и возьмем массив:
    Route [] routes = new Route [];
    Инициализируем массив маршрутов. В мапу кладем доход. Ключом является день недели, а значением доход на этот день.
    Далее остается при помощи класса Scanner, который вы используете принять выручку на каждый день недели для каждого из маршрутов.
    После того, как вы примете значения остается итерировать по массиву Route. Внутри цикла получить мапу. Проитерировав по мапе получить значения (доходы) по ключу и вывести сумму (недельный доход) в консоль

    Я условился, что за маршрут можно получить от 1000 до 10000.

    За маршрут можно получить и 550 руб. 50 коп. Целых значений может и не быть
    Ответ написан
    2 комментария
  • Как обновит массив объектов в spring boot?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Ну во-первых, вам не нужно итерировать по старой и новой коллекции.
    Вы можете либо воспользоваться методом addAll(). либо же раз решили итерировать, то
    создать методы add() и remove()
    Прочитайте эту статью:
    https://vladmihalcea.com/the-best-way-to-map-a-one...
    Для более полного ответа нужно увидеть весь код. Например, вы указали вот, эту строку в комментарии:
    List<Address> addressList = oldUser.getAddress()
    Тут либо действительно проблема. либо метод назван неправильно, так как getAddress() подразумевает получение одного адреса, а не списка адресов пользователя. Должно быть getAddresses(), ну а метод getAddress() должен возвращать 1 адрес
    Рекомендую поставить брейкпоинты и провести дебаг
    Ответ написан
    Комментировать
  • Почему мои куки исчезли? Как мне оставаться в одной сессии?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Если я вас правильно понял, то у вас есть проект на Angular + Spring Boot.
    Не видя исходный код проекта сложно что-либо объективно сказать, но тем не менее постараюсь.
    Итак, рассмотрим простую модель - вы пишете REST приложение. Имеется некий эндпоинт, который принимает логин и пароль и в ответ генерирует jwt (токен). В чуть более сложной модели могуть быть 2 токена - access token & refresh token.
    Затем вам необходимо каждый раз в заголовке этот токен передавать. Например, Bearer xxxxxx
    Не забываем сохранить сам токен в localStorage и каждый раз отправлять его в бэкенд
    Ответ написан
  • Как подключится к Apache Derby по URL адресу?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Там написано, что не удалось установить соединение.
    1) Убедитесь в том, что derby на порту - 1527
    2) попробуйте вместо localhost ввести 127.0.0.1
    Вот, информация по работе с Derby через jdbc
    https://www.codejava.net/java-se/jdbc/connect-to-a...
    Вот, похожая проблема:
    https://stackoverflow.com/questions/10420902/data-...
    Ответ написан
    Комментировать
  • Как и где найти грамотного персонального преподователя JAVA?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Так как обучение по сути самообучение, то время от времени возникают вопросы, которые хотелось бы детально на примерах разобрать с наставником / преподавателем.

    Нет смысла в персональном обучении... Либо ищите ментора, либо можете записаться на курсы.
    Но необязательно. Можно самому все изучить. Тут уже от вас зависит все. Не забываем про учебники
    Ответ написан
    1 комментарий
  • Может ли одно Java-приложение работать с разными БД?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Что за приложение. которое работает по принципу "1 сервер - 1 клиент". А если в будущем будет 1000 клиентов? А если 1М?
    Ну а так вы можете перейти на микросервисную архитектуру. Развернуть отдельный сервер конфигурации (config server), gateway & discovery service. А затем развернуть по 1 инстансу приложения на каждого клиента
    Ну или как отметил коллега, реализовать мультиарендность (multitenancy)
    Ответ написан
  • Java как после точки переносить на новую строку текст?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Было бы неплохо увидеть код.
    Каким образом мне отследить точку в тексте?

    "Отследить" вы можете при помощи регулярного выражения. А затем, использовать замену на перенос строки (\n)
    Вот, пример - https://regex101.com/r/dJux7d/1
    Ответ написан
    Комментировать
  • Почему не работает ввод с консоли Java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Проблема заключается в следующем:
    Вы сперва с вводите первое число и нажимаете на перевод строки (Enter).
    Когда вы нажимаете на перевод строки срабатывает ввод числа b, который и принимает собственно говоря знак перевода строки и так как он не является числом, то выбрасывается исключение.
    Чтобы этого не было:
    int c = Integer.parseInt(scanner.nextLine());
    Scanner.nextline();
    int b = Integer.parseInt(scanner.nextLine());

    И как отметил коллега - используйте nextInt() вместо nextLine()
    Вот, аналогичная проблема - https://stackoverflow.com/questions/13102045/scann...
    Ответ написан
    Комментировать
  • Разница между if else и try catch?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Стоит также обратить внимание на то, что есть try with resources, что позволяет после работы автоматически закрывать соединение и т.д. Т.е. все, что имплементирует интерфейс AutoClosable. Например, подключиться к БД, что-то сделать, а затем закрыть соединение. Как мимнимум в if else этого нет.
    С другой стороны try catch более тяжелый с точки зрения производительности.
    Ответ написан
    Комментировать
  • Как можно реализовать пагинацию в Java, в том случае, когда данные для фильтрации должны браться из двух разных микросервисов?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Согласен с коллегой. Возможно. вам стоит рассмотреть вопрос о слиянии микросервисов или же о создании доп. микросервиса, у которого будет доступ к базе и данные будут согласованы (сага паттерн вроде должен подойти)
    Ответ написан
    Комментировать