• Как сделать rest контроллер для отправки сообщения от телеграмм бота?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Кстати, есть готовые либы, который позволяют удобно работать с телеграм ботом через Spring
    https://github.com/kshashov/spring-boot-starter-te...
    https://github.com/xabgesagtx/telegram-spring-boot...
    Ответ написан
  • В чем предназночения сервисов?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Соль использования в том, что в сервисы добавляют бизнес-логику. Например, получить данные из репозитория и что-то с ними сделать. Или же наоборот после получения данных из контроллеров, обработать их на уровне сервисов, а затем уже сохранить и т.д.
    Возможно, что необходимо замаппит объект в DTO или же наоборот.
    В общем. нужная вещь))
    Ответ написан
    1 комментарий
  • Отношение между Student (is- a) Person, а отношение Group (has-a) Student?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Student is a Person - это ассоциация.
    Group has a Person - это агрегация. Композицией не является, так как студент может существовать отдельно от группы.
    https://habr.com/ru/post/150041/
    https://javarush.ru/groups/posts/1967-otnoshenija-...
    https://habr.com/ru/post/511798/
    Ответ написан
    Комментировать
  • Есть ли какие-нибудь готовые решения/ библиотеки для чата?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    В качестве "движка" можете использовать RabbitMQ, Spring Websockets, ActiveMQ, Kafka.
    Ну и остается взять какой-нибудь красивый фронт и написать необходимый функционал
    Ответ написан
    2 комментария
  • Полностью не работают файлы формата HTML во View MVC проекта, как исправить?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Добрый вечер.
    Проблема не в спринге, а настройках вашего IDE.
    Попробуйте - https://intellij-support.jetbrains.com/hc/en-us/co...
    Ответ написан
    Комментировать
  • Почему возникает org.springframework.beans.factory.UnsatisfiedDependencyException, при попытке подключения к PostgreSQL?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Уберите:
    <!-- https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-core -->
        <dependency>
          <groupId>org.hibernate.orm</groupId>
          <artifactId>hibernate-core</artifactId>
          <version>6.0.0.Final</version>
        </dependency>
     <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
        <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-entitymanager</artifactId>
          <version>5.6.8.Final</version>
        </dependency>


    Также вы можете удалить version отсюда:
    <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jpa</artifactId>
          <version>2.6.6</version>
        </dependency>


    Попробуйте перезапустить приложение. Вот. похожая проблема: https://stackoverflow.com/questions/42182426/sprin...
    Ответ написан
    Комментировать
  • Как спарсить json?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Есть онлайн-сервис, который помогает создать pojo на основе json
    Вот, что он выдал
    -----------------------------------com.example.Example.java-----------------------------------
    
    package com.example;
    
    import javax.annotation.Generated;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;
    
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
    "0",
    "1",
    "2"
    })
    @Generated("jsonschema2pojo")
    public class Example {
    
    @JsonProperty("0")
    public com.example._0 _0;
    @JsonProperty("1")
    public com.example._1 _1;
    @JsonProperty("2")
    public com.example._2 _2;
    
    }
    -----------------------------------com.example._0.java-----------------------------------
    
    package com.example;
    
    import javax.annotation.Generated;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;
    
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
    "created",
    "suip",
    "result",
    "operationNumber"
    })
    @Generated("jsonschema2pojo")
    public class _0 {
    
    @JsonProperty("created")
    public String created;
    @JsonProperty("suip")
    public String suip;
    @JsonProperty("result")
    public String result;
    @JsonProperty("operationNumber")
    public String operationNumber;
    
    }
    -----------------------------------com.example._1.java-----------------------------------
    
    package com.example;
    
    import javax.annotation.Generated;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;
    
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
    "created",
    "suip",
    "result",
    "operationNumber"
    })
    @Generated("jsonschema2pojo")
    public class _1 {
    
    @JsonProperty("created")
    public String created;
    @JsonProperty("suip")
    public String suip;
    @JsonProperty("result")
    public String result;
    @JsonProperty("operationNumber")
    public String operationNumber;
    
    }
    -----------------------------------com.example._2.java-----------------------------------
    
    package com.example;
    
    import javax.annotation.Generated;
    import com.fasterxml.jackson.annotation.JsonInclude;
    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.annotation.JsonPropertyOrder;
    
    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
    "created",
    "suip",
    "result",
    "operationNumber"
    })
    @Generated("jsonschema2pojo")
    public class _2 {
    
    @JsonProperty("created")
    public String created;
    @JsonProperty("suip")
    public String suip;
    @JsonProperty("result")
    public String result;
    @JsonProperty("operationNumber")
    public String operationNumber;
    
    }

    Сам сервис - https://www.jsonschema2pojo.org/
    Ответ написан
    1 комментарий
  • Будет ли работать приложение если установить mysql, PostgreSQL в докер?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Я всегда использую СУБД в докере. Очень удобно использовать конфиги для docker compose
    Вот, конфиги, чтобы быстро поднять БД + панель управления.
    PostgreSQL + PgAdmin
    version: '3.8'
    services: 
      postgres:
        container_name: postgres
        image: postgres
        restart: always
        environment:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          PGDATA: /data/postgres
        ports:
          - "5432:5432"
        volumes:
          - postgres:/data/postgres
      pgadmin:
        depends_on:
          - postgres
        container_name: pgadmin4
        image: dpage/pgadmin4
        restart: always
        environment:
          PGADMIN_DEFAULT_EMAIL: mail@example.com
          PGADMIN_DEFAULT_PASSWORD: postgres
        ports:
          - "5050:80"
        volumes:
          - pgadmin:/root/.pgadmin
    
    networks:
      postgres:
        driver: bridge
    
    volumes:
      postgres:
      pgadmin:


    Mysql + PhpMyAdmin
    version: '3.8'
    
    services:
      mysql:
        image: mysql:latest
        container_name: mysql
        restart: always
        ports:
         - '3306:3306'
        environment:
          MYSQL_ROOT_PASSWORD: mysql
      phpmyadmin:
        depends_on:
          - mysql
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        restart: always
        ports:
         - '5051:80'
        environment:
         - PMA_HOST=mysql
         - UPLOAD_LIMIT=1024M
         - MEMORY_LIMIT=1024M
         - MAX_EXECUTION_TIME=300version: '3.8'
    
    services:
      mysql:
        image: mysql:latest
        container_name: mysql
        restart: always
        ports:
         - '3306:3306'
        environment:
          MYSQL_ROOT_PASSWORD: mysql
      phpmyadmin:
        depends_on:
          - mysql
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        restart: always
        ports:
         - '5051:80'
        environment:
         - PMA_HOST=mysql
         - UPLOAD_LIMIT=1024M
         - MEMORY_LIMIT=1024M
         - MAX_EXECUTION_TIME=300


    MariaDB + PhpMyAdmin
    version: '3.8'
    
    services:
      mariadb:
        image: mariadb:latest
        container_name: mariadb
        restart: always
        ports:
         - '3306:3306'
        environment:
          MYSQL_ROOT_PASSWORD: mariadb
      phpmyadmin:
        depends_on:
          - mariadb
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        restart: always
        ports:
         - '5051:80'
        environment:
         - PMA_HOST=mariadb
         - UPLOAD_LIMIT=1024Mversion: '3.8'
    
    services:
      mariadb:
        image: mariadb:latest
        container_name: mariadb
        restart: always
        ports:
         - '3306:3306'
        environment:
          MYSQL_ROOT_PASSWORD: mariadb
      phpmyadmin:
        depends_on:
          - mariadb
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        restart: always
        ports:
         - '5051:80'
        environment:
         - PMA_HOST=mariadb
         - UPLOAD_LIMIT=1024M
         - MEMORY_LIMIT=1024M
         - MAX_EXECUTION_TIME=300
         - MEMORY_LIMIT=1024M
         - MAX_EXECUTION_TIME=300
    Ответ написан
    2 комментария
  • Можно ли в Hibernate одна таблица унаследовало ID второй таблицы?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Так может быть вам не нужна связь OneToOne, а нужна @Embeddable для Activity и вместо связи OneToMany для List использовтаь @ElementCollection или @CollectionOfElements для List<Address>
    https://stackoverflow.com/questions/8969059/differ...
    https://www.baeldung.com/jpa-embedded-embeddable
    Если вы хотите встроить ID, то наверное можно глянуть на @EmbeddedId https://www.baeldung.com/spring-jpa-embedded-metho...
    Ответ написан
    Комментировать
  • Котруется ли у it компаний курсы JavaRush?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Максимум, что может котироваться, так это диплом и то, в больших компаниях. НО!
    Если у вас есть диплом, но нет соответствующих знаний, то уж поверьте он никак вам не поможет.
    Что касается курсов (неважно, будь то udemy, javarush, stepik и др.) Наличие сертификата наверное. лишь небольшой бонус и лишние документы в вашем личном деле и не более.
    Отбор проводят по наличию ваших знаний. Проверяют знание тех технологий и стеков, которые вы указали в вашем CV. Если вы подходите, то проблем не будет.
    Ответ написан
    Комментировать
  • Можно ли подключить Spring к proteus(или аналогам)?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Ответ написан
    Комментировать
  • Оправдано ли использование TypeScript для больших проектов?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Именно в больших проектах его применение более чем оправдано.
    Ответ написан
    1 комментарий
  • Зачем нужно DTO в простых сервлетах?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    DTO - data transfer object это шаблон проектирования.
    Варианты использования:
    Из клиента прибегает DTO. После чего он маппита в Entity и сохраняется / обновляется в БД.
    Либо наоборот из БД вы маппите ваши сущности в DTO и отдаете их в нужном виде.
    Это позволяет обезопасить приложение путем создания доп. прослойки. также вы можете отдавать на клиент только нужную для него информацию, а не всю сущность со всеми зависимостями и т.д.
    Также на уровне DTO вы можете провести доп. валидацию отправленных от клиента данных.
    Ответ написан
    Комментировать
  • Какое здесь регулярное выражение можно применить?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    data = data.replaceAll(",\s?(\d{1})", ",\n$1");
    https://regex101.com/r/A5Ffkx/1
    Ответ написан
    Комментировать
  • Как сделать рефакторинг данный код?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Поделюсь своими мыслями. А вы уже сами решайте стоит ли вносить правки в ваш код.
    1) Судя по этому сниппету:
    public void updateUserByInn(List<Users> usersList) {
            for (Users dto : usersList) {

    Метод принимает Dto.
    Ну тут во-первых, класс должен быть в ед. числе Users -> User
    Во-вторых, если это Dto, то это должно быть как-то отображено в названии. Например, UserDto, UserUpdateRequest и т.д.
    А раз это DTO, то маппинг можно вынести в отдельный метод или даже класс. Можно воспользоваться интерфейсом Converter <UserDto, User>, можно подключить либы (ModelMapper, MapStruct).
    Если решите использовать ModelMapper, то обратиться внимание на этот вопрос, дабы исключить null параметры:
    https://stackoverflow.com/questions/45451025/how-t...

    2) Вместо того, чтобы выбрасывать NPЕ можно использовать Optional класс и выбросить кастомное исключение:
    Users user = usersRepository.findByInnAndExternalPartnerId(dto.getInn(), dto.getExternalPartnerId()).orElseThrow(UserNotFoundException::new);

    Для этого из репозитория ваши методы должны возвращать Optional<User>

    3) Сам метод должен быть назван корректно.
    updateUserByInn обновить юзера по ИНН. А в методе вы обновляете пользователей, а не одного юзера еще и притом обновляете не только по Inn, а по ExternalPartnerId тоже. Значит, метод назван некорректно

    Когда вы вынесете дублирующийся код в отдельный метод или даже класс, то код значительно сократиться и станет более читабельным.
    Ответ написан
    Комментировать
  • Как создать метод из SQL запроса?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Ну пожалуй, вам стоило бы уточнить работаете ли вы с jdbc или с Spring JDBC, Spring JPA, Hibernate и т.д.
    В Spring есть такая штука, как exists*
    Например,
    existsCustomerByNameAndPurchase(String name, String purchase);

    Подробнее: https://www.baeldung.com/spring-data-exists-query
    Ну а если jdbc, то в чем проблема? Выполнили SQL запрос. Проверили кол-во записей. Если больше 0, то значит true, если 0 - false
    Ответ написан
    8 комментариев
  • Путь до junior developer (java/kotlin). Сколько времени потребуется?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Расскажу про свой путь становления разработчиком и может быть это натолкнет вас на некоторые мысли и возможно, даже поможет принять решение.

    Лет 10 назад изучал html, css, php, SQL, как хобби.

    Аналогично. Правда, это было 13 лет назад. Я тогда забил на РНР. Первый сайт вообще поднял на Microsoft FrontPage, затем уже пошли различные CMS (Joomla, WP, Drupal). Окончил вуз по другой специальности. 3-4 года фрилансил как ВП разработчик, но в определенный момент надоело клепать сайты и захотелось чего-то большего. Тогда я владел рнр, js на определенном уровне, но писать на нем не было желания. Выбор пал на Java. Начал изучать самостоятельно с 2018 года (писал парсеры, приложения на JavaFX, пару приложений для андроид и т.д.). Но с учетом моей любви к вебу и к энтерпрайз, то в 2020 году прошел 6-мксячный курс по Java Core & Java Enterprise. Сам много чего изучал. Читал книги, брал курсы на udemy, изучал чужой код на гитхаб, брал мелкие, простые заказы, писал пет проекты и т.д.

    Насколько наличие сертификата об окончании платных/бесплатных курсов помогает в поиске работы или работодателя в первую очередь интересуют знания кандидата?

    Разумеется, что знания важнее. А уровень ваших знаний определеляется на собеседовании.

    Путь до junior developer (java/kotlin). Сколько времени потребуется?

    В первую очередь, зависит от вас. На курсах преподаватель может впихнуть в вас весь учебник, но не факт, что вы его запомните. Но минимальное время наверное, 6 мес. Как правило, курс Java Core занимает примерно 3 месяца и Android API занимает тоже 3-4 месяца. Этого времени достаточно для того, чтобы вы устроились в качестве trainee || junior.

    Вот, полезные ссылки, которые помогут вам в достижении ваших целей:
    https://www.hackerrank.com/
    https://refactoring.guru/
    https://www.baeldung.com/
    https://www.it-academy.by/
    tutorials.jenkov.com
    https://www.tutorialspoint.com/java/index.htm
    https://vladmihalcea.com
    https://github.com/enhorse/java-interview
    гугл

    Не забываем про учебники:
    Java head first (хотя его я не очень люблю)
    Г. Шилдт - Полное руководство по Java
    Р. Лафоре - Алгоритмы и структуры данных Java
    Б. Эккель - Философия Java
    Р-Г. Урма - Современный язык Java.
    Б. Гетц - Java Concurrency на практике
    и др.
    Ответ написан
    2 комментария
  • Как разделить строку java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Метод split принимает regexp.
    String str = "Мама мыла раму";
    String[] words = str.split(" ");

    https://javarush.ru/groups/posts/2907-metod-split-...
    Об этом речь?

    Если вы хотите разделить строку, в которой могут быть разное кол-во пробелов между словами
    String str = "Мама      мыла   раму";
    String[] words = str.split("\\s+");
    Ответ написан
    Комментировать
  • Изучаю java 3 й месяц, прошу помочь советом куда двигаться и можно ли начать искать стажировки или пока рано?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Пожалуй, каждый из нас задавался тем, учит ли он актуальную информацию или теряет время. В принципе, все то, что вы описали актуально. Java Core, Java EE, OOP, AOP, Spring (вся экосистема), Hibernate, Jenkins, git, SQL, html, css, xml, json, maven, gradle и т.д.
    Как думаете ,можно(нужно) ли начать искать стажировки с дальнейшим трудоустройством или пока рано?

    Да, можно начать, нужно искать. Если возьмут, то почему бы и нет. Можно даже брать заказы с фриланса и пробовать себя в этой сфере. Для начала брать простые задачи (парсеры, боты), а затем уже повышать скиллы.
    Также очень важно написать пару пет проектов для себя.
    Ответ написан
    3 комментария
  • Как передать объект другому запросу?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Если брать запрос: localhost:8080/ то он должен проверить была ли сделана авторизация, если нет, то делает redirect, если было сделано, то он показывает разметку, в котором уже находятся данные объекта пользователя.


    Вот, например небольшой сниппет:
    @GetMapping("/admin")
        public String dashboard() {
            // Проверка авторизации пользователя
            boolean isAuthorised = SecurityContextHolder.getContext().getAuthentication() != null &&
                    SecurityContextHolder.getContext().getAuthentication().isAuthenticated() &&
                    !(SecurityContextHolder.getContext().getAuthentication() instanceof AnonymousAuthenticationToken);
            if (isAuthorised) {
                return "redirect:/admin/dashboard";
            }
            return REDIRECT_ADMIN_LOGIN;
        }


    Так же было не понятно что после кнопки авторизации, передача объекта другому запросу с помощью redirect. По коду выглядит все так

    В это случае вместо addAttribute() нужно использовать addFlashAttribute()
    Подробности тут - https://stackoverflow.com/questions/14470111/sprin...
    Ответ написан