• Реализация таблиц Студент и Преподаватель?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день!
    Итак,
    Вам нужны 3 модели:
    1) User (содержит общие поля) - @MappedSuperclass
    2) Student - @Entity
    3) Teacher - @Entity
    Подробнее - https://www.baeldung.com/hibernate-inheritance
    Ответ написан
    Комментировать
  • Этот код является ООП?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Является ли код ООП - да, является. Но как отметил коллега, над ним стоит поработать. Прочитайте про java naming convention.
    Также есть неплохой курс на https://refactoring.guru/refactoring
    Классы должны иметь понятное название
    class B extends A
    Не забываем про camelCase
    b.setage(20);
    Модификатор доступа public в интерфейсе лишний
    interface D {
        public void d();
    }

    Нельзя создать экземпляр абстрактного класса:
    C c = new C();
    Ответ написан
    Комментировать
  • Как скрыть отдельную страницу из верхнего меню wordperss?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день!
    1) Зайти в админку
    2) В разделе "Страницы" - найти эту страницу и отредактировав установить статус черновик (или удалить вовсе)
    3) В разделе "Внешний вид" - "Меню" - удалить данный пункт меню из соответствующего меню (если у вас их несколько)
    Ответ написан
  • Как программно проигрывать ноты гитары?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Довольно интересная затея.
    С учетом своего опыта использования подобных приложений (я играю на электрогитаре), могу сказать то, что есть довольно много приложений, которые воспроизводят звук электрогитары. Самыми известными среди них являются: Ultimate Guitar, Tonebridge, Songsterr, Guitar Tab X. Именно звуки гитары этих приложений максимально дают натуральное звучание. Как вариант, можно постараться декомпилировать их и изучить исходники.
    Я встречал готовую либу, которая способна воспроизводить звук гитары по табулатуре.
    Называется она AlphaTab и судя по заявлению разработчиков, то можно ее использовать и в mobile.
    https://www.alphatab.net/
    Также не знаю поможет ли вам это, но в Java есть пакет javax/sound/midi
    https://habr.com/ru/post/211480/
    Возможно, данная ссылка будет также полезна для вас: https://stackoverflow.com/questions/20393183/javax...
    Ответ написан
    1 комментарий
  • Как в Spring boot Java сформировать подпись?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Так вроде там написано, что нужно сделать. Даже показан код на js.
    Вы хотите интегрировать некий сторонний сервис, куда будете отправлять запрос или как? Если вы хотите у себя формировать некую подпись, то скорее всего нужен контроллер с указанным в задании урлом (нужно больше информации).
    А так если вкратце:
    1) Есть URL, куда нужно отправлять запрос. Для отправки запроса из Spring используйте RestTemplate. Если нужен реактивный стек, то WebClient.
    2) Есть JSON, который нужно отправить в Body. Структура json указана во втором пункте.
    3) Далее есть соль (salt). Для генерации используйте UUID.randomUUID().toString();
    4) Также вам необходимо secret key полученный от Namba One перевести в hmac.
    Вот, пример:
    https://www.baeldung.com/java-hmac
    Ответ написан
    Комментировать
  • Как парсить данные с localhost:8080, используя Jsoup?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Я посмотрел на исходный код проекта и все стало на свои места.
    Во-первых, этот проект использует Vaadin. К сожалению, мне не доводилось использовать его, но я могу сказать следующее:
    Контент страницы формируется динамически на клиенте. JSoup не умеет работать с динамически формируемым контентом и потому, на момент парсинга документа там лишь:
    <div id="outlet"></div>
    Соответственно, чтобы спарсить динамический контент вам нужно:
    1) либо изучить внутренний АПИ и спарсить json, который возвращается извне. Зайдите во вкладку Network (Сеть) браузера и отфильтруйте XHR запросы и гляньте, на какой эндпоинт выполняется запрос и что возвращается в ответ.
    2) либо спарсить сайт при помощи Selenium. (запустить браузер, дождаться загрузки страницы, получить документ, получить List<WebElement>)
    Ответ написан
    1 комментарий
  • Как развернуть локально всю экосистему если дали доступ к vps на которой все в докере?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    1) Можно попробовать создать docker image из контейнера, а затем его развернуть у себя.
    https://www.sentinelone.com/blog/create-docker-image/
    2) Можно создать бекап виртуалки и развернуть его у себя в виртуалке)))
    3) Если это все нужно для дебага, то можно провести удаленный дебаг. Например, xdebug
    4) Как по мне самым адекватным решением должно быть следующее:
    Поднять у себя эти контейнеры на основе Dockerfile. (возможно, используеться docker compose).
    Затем экспортировать БД из продакшна и закинуть его себе.
    Ответ написан
    Комментировать
  • Как зашифровать / обезопасить property файл?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Вы можете воспользоваться Java Cryptography Extension
    https://www.oracle.com/java/technologies/javase-jc...
    Ответ написан
    Комментировать
  • DonationAlerts API - Как получить Code, Token через ссылку?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Тут есть документация, где можно подробно прочитать:
    https://www.donationalerts.com/apidoc
    Прочитайте от: "1 - Application Registration" до "3 - Getting Access Token"

    В вашем коде вы не определили значения этих переменных:
    String API_KEY = "API_TOKEN";
            String  APP_ID = "APP_ID";
            String REDIRECT_URI = "REDIRECT_URI";
            String SCOPE = "oauth-donation-index";

    Прочитав указанные выше главы, вы поймете, что нужно вписать туда.
    Ответ написан
  • Как сформировать структуру данных и вернуть на клиент?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Скажите пожалуйста, правильно ли я понимаю, что у вас есть таблица с данными, а также сами сущности (entity) и вы хотите вернуть результат полученный из БД на клиент?
    Т.е. меня интересует следующее: db first or code first?
    Если у вас code first, то значит сущности у вас имеются и вам необходимо создать доп. классы (DTO). Далее полученные данные из БД замаппить в DTO.
    Для маппинга (после того, как будут созданы DTO) можно использовать доп. либы: ModelMapper, MapStruct или же интерфейс Converter<S,T>
    Если хотите создать dto на основе имеющегос у вас json файла, то можно воспользоваться онлайн-сервисом или представляемой ими либой.
    Сервис - https://www.jsonschema2pojo.org/
    Кстати, вы уверены, что у вас в вопросе указаны данные в json?
    Вот, json:
    {
        "id": 1,
        "numberOperation": "010",
        "nameOperation": "Токарная",
        "workshop": 6465,
        "area": 7,
        "OO": true,
        "OTK": false,
        "PZ": true,
        "KPS": true,
        "transition": [
            {
                "id": 1,
                "nameTransition": "Закрепить деталь",
                "executor": [
                {
                    "id": 1,
                    "nameExecutor": "4784",
                    "tsht": "4",
                    "tpz": "9",
                    "test": "7",
                    "tshtCalculated": "",
                    "tpzCalculated": "",
                    "testCalculated": "",
                    "kvr": "973"
                }, ]
            },
    
        ]
    }

    И вот dto построенные на основе вышеуказанного json (обратите внимание, что код скорее всего необходимо подправить под ваши нужды)
    DTOs
    -----------------------------------com.example.Example.java-----------------------------------
    
    package com.example;
    
    import java.util.List;
    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({
    "id",
    "numberOperation",
    "nameOperation",
    "workshop",
    "area",
    "OO",
    "OTK",
    "PZ",
    "KPS",
    "transition"
    })
    @Generated("jsonschema2pojo")
    public class Example {
    
    @JsonProperty("id")
    public Long id;
    @JsonProperty("numberOperation")
    public String numberOperation;
    @JsonProperty("nameOperation")
    public String nameOperation;
    @JsonProperty("workshop")
    public Long workshop;
    @JsonProperty("area")
    public Long area;
    @JsonProperty("OO")
    public Boolean oo;
    @JsonProperty("OTK")
    public Boolean otk;
    @JsonProperty("PZ")
    public Boolean pz;
    @JsonProperty("KPS")
    public Boolean kps;
    @JsonProperty("transition")
    public List<Transition> transition = null;
    
    }
    -----------------------------------com.example.Executor.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({
    "id",
    "nameExecutor",
    "tsht",
    "tpz",
    "test",
    "tshtCalculated",
    "tpzCalculated",
    "testCalculated",
    "kvr"
    })
    @Generated("jsonschema2pojo")
    public class Executor {
    
    @JsonProperty("id")
    public Long id;
    @JsonProperty("nameExecutor")
    public String nameExecutor;
    @JsonProperty("tsht")
    public Long tsht;
    @JsonProperty("tpz")
    public Long tpz;
    @JsonProperty("test")
    public Long test;
    @JsonProperty("tshtCalculated")
    public String tshtCalculated;
    @JsonProperty("tpzCalculated")
    public String tpzCalculated;
    @JsonProperty("testCalculated")
    public String testCalculated;
    @JsonProperty("kvr")
    public Long kvr;
    
    }
    -----------------------------------com.example.Transition.java-----------------------------------
    
    package com.example;
    
    import java.util.List;
    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({
    "id",
    "nameTransition",
    "executor"
    })
    @Generated("jsonschema2pojo")
    public class Transition {
    
    @JsonProperty("id")
    public Long id;
    @JsonProperty("nameTransition")
    public String nameTransition;
    @JsonProperty("executor")
    public List<Executor> executor = null;
    
    }
    Ответ написан
    Комментировать
  • Можно ли как-то заранее внести данные в базу данных SQLite?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Разумеется можно.
    Вы можете создать некий sql файл и записать туда ваши запросы. А при запуске приложения импортировать их.
    Вот, похожие вопросы:
    https://stackoverflow.com/questions/47466913/sqlit...
    https://stackoverflow.com/questions/22890693/impor...
    Ответ написан
    Комментировать
  • Как разместить несколько телеграм ботов на сервере?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Можно докер поднять, чтобы вообще приложения не пересекались.
    + прописать необходимые записи для доменов
    Ответ написан
    Комментировать
  • Разработка symfony-проекта в Docker?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Я не сталкивался с symfony и не являюсь РНР разработчиком, но зачем вы хотите разрабатывать проект внутри докера?
    Разработайте проект отдельно, затем, когда он будет готов, добавьте необходимую конфигурацию для деплоя приложения в докер контейнере.
    Ответ написан
  • Цикл for с вводом в консоль исполняется дважды, дебаг не производится?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Рекомендую использовать Intellij IDEA Community Edition или Eclipse, хотя это не имеет отношения к проблеме.
    Что касается вашего вопроса, то символ 'Enter' тоже символ. Отсюда и 2 прохода
    Попробуйте:
    public static void main(String[] args)  {
        
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
          char symbol = scanner.next().charAt(0);
          if (symbol == 'S') {
            System.exit(-1);
          }
        }
    
      }
    Ответ написан
    1 комментарий
  • Как объединить 2 ArrayList в 1 по совпадающему значению (id)?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Одно из возможных решений:
    - создайте Map<Long, Product>
    Long - id продукта
    - Добавьте элементы первого List'а в Map.
    - Итерируйте по второму List'у. Внутри цикла получите товар из Map по идентификатору объекта из второго List'a.
    - При помощи сеттеров назначьте значения.
    - Если товара с таким ID нет, то добавьте в Map

    Вот, похожий вопрос - https://stackoverflow.com/questions/12670756/join-...
    Ответ написан
    Комментировать
  • Разумно ли использовать DependencyInjection в JavaFX?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Да, разумно.
    Я даже скажу так, есть готовая либа на Spring со всеми возможностями спринга для JavaFX.
    https://habr.com/ru/post/478402/
    сама либа - https://github.com/rgielen/javafx-weaver
    Ответ написан
    1 комментарий
  • Как переименовать java в jar?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Думаю, что вам необходимо начать с изучения азов.
    jar - это java архив.
    java - это расширение файла до компиляции
    class - это расширение файла после компиляции (где хранится байт-код)

    Error: Could not find or load main class jdk Caused by: java.lang.ClassNotFoundException: jdk.

    Класс jdk не найден. Выложите исходный код, чтобы можно было понять в чем проблема. Надеюсь, что вы не забыли добавить main метод?
    Также вам нужен файл MANIFEST.mf куда нужно прописать Main-Class: jdk
    И еще один нюанс, если у вас много зависимостей, то возможно понадобится сделать fat jar (jar with dependencies)
    https://stackoverflow.com/questions/16222748/build...
    Ответ написан
    Комментировать
  • Как дозаполнить корректно поля для Entity при конвертации из DTO?

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

    Итак, насколько я вас понял, то вы хотите обновить существующую запись на основе данных, которые прибежали из контроллера в виде DTO.

    Во-первых, в данном случае стоит использовать PutMapping (full updates) или PatchMapping (partial updates)
    Читаем подробно тут:
    https://www.baeldung.com/http-put-patch-difference...

    Во-вторых, после того, как вы получили DTO вам необходимо его замаппить в Entity и обновить в БД. Однако, могут быть поля, которые не были заполнены в DTO и вы не хотите, чтобы они были применены, как null, так?

    Далее конвертирую в entity, но откуда мне взять значения тех полей, которых не было в запросе?

    Вам не нужно дозаполнять поля сконвертированного entity. Вам необходимо:
    1) найти этот entity по идентификатору.
    2) Если не хотите, чтобы null поля были применены к сущности, то при маппинге (см. ниже) сделать null check и если поле DTO null, то не сеттить его к сущности.
    3) сохранить сущность.

    Что касается маппинга:
    1) Вы можете использовать интерфейс Converter<S, T>. И для каждого из полей сделать проверку типа (псевдокод):
    if (fieldValue != null) { entity.setField(fieldValue); }

    2) Если вы используете какую-либо библиотеку для маппинга (modelMapper, MapStruct и др.), то используйте возможности либы. Например, для modelMapper:
    modelMapper.getConfiguration().setPropertyCondition(Conditions.isNotNull());

    https://stackoverflow.com/questions/45451025/how-t...

    Также прокомментирую ваши комментарии из другого ответа:
    вот мне интересно, как решается этот вопрос. Разве это нормально, что на каждый пришедший запрос к сервису приходится ходить к базе данных? И это без учета логики!

    Можно настроить кеширование и тогда, обращения к БД не будет.


    Это базовая ситуация, с которой сталкивается каждый. Допустим у меня entity Person с атрибутом даты рождения, которую я не хочу отображать в PersonDto. Когда пользователь пришлем мне PersonDto по API для, допустим, операции обновления, то как мне при конвертации в entity вернуть эту дату рождения, чтобы я мог сохранить новую сущность?

    Обратите внимание на то, что может быть несколько DTO.
    Например,
    PersonCreationRequest - dto, которое заполняется из фронта при создании юзера
    PersonCreationResponse - dto, которое заполняется из бекенда после создания юзера
    PersonUpdatingRequest - dto, которое заполняется из фронта при обновлении юзера
    PersonUpdatingResponse - dto, которое заполняется из бекенда после обновления юзера
    PersonDto - общее dto, которое заполняется из бекенда для других нужд.
    Могут быть и другие DTO...
    Соответственно, ответ на ваш вопрос - используйте разные DTO.

    Не знаю насколько точно смог ответить на ваш вопрос.
    Ответ написан
    1 комментарий