Задать вопрос
  • Как обновить страницу через БД?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Если вы обновили БД, но сайт не обновился, то скорее всего где-то есть кеш.
    1) На клиенте - почистите кеш браузера
    2) На сервере - это может быть кеш CDN (maxCDN, cloudflare), это может быть кеш плагинов (fastest cache, autoptimize и др.) или же кеш другого серверного ПО.
    Ответ написан
  • Будет ли курс и книги по Java 2019 года выпуска актуальны в 2021?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Я бы рекомендовал вместо книги Г. Шилдт "Руководство по Java для начинающих" прочитать книгу Г. Шилдт "Полное руководство по Java".

    Единственное что смущает, что и книга и курс выпущены в 2019 году.

    Год выпуска не имеет столь важного значения. Можно взять книгу хоть 2009 года. Важно, чтобы книга, которую вы прочитаете была написана про Java 8 или выше, так как начиная с этой версии было внесено много изменений в язык (Java Stream API и т.д.).

    Насколько актуальны они будут для начального погружения в Java?

    Для начинающих актуально все, что можно прочитать.

    Если есть что-то более свежее, можете посоветовать?

    Можете смело начать с книг Г. Шилдта. Есть еще одно пособие для начинающих - Java Head First. Но как по мне там слишком много воды...

    Что касается курсов на Udemy или youtube, coursera и т.д. из всех авторов мне нравится Наиль Алишев. Я видел его курсы по git & spring framework. Вроде у него есть 2 курса по java тоже на udemy. Сказать что-либо объективного по поводу вашего курса на Udemy не могу, ибо не знаю.
    Также есть зарубежные разработчики. Например, John Thompson, Tim Buchalka и др.
    Ответ написан
    1 комментарий
  • Как сделать свою библиотеку "популярной"?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Тут вопрос больше не про Java, а скорее про популяризацию того или иного материала (будь то библиотека для Java или что-то другое).
    В таком случае можно рекомендовать вам написать статьи, обзоры и туториалы в таргетных сайтах. Для разработчиков хорошо подойдут такие сайты, как Хабр, Medium. Можно также закинуть видео на youtube с демо или туториалом вашей библиотеки. Конечно же материалы предоставить в двух языковых версиях - на английском и на русском.
    Также очень полезно бывает залить ее исходники (если это опенсора) на все гит репозитории (github, gitlab, bitbucket) и также максимально подробно написать README.md, чтобы люди могли без затруднений найти исходники вашей либы в просторах интернета.
    Ответ написан
    Комментировать
  • Почему не билдится класс?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Добрый день!
    Обычно, такая проблема возникает по двум причинам:
    1) нет плагина lombok - https://projectlombok.org/setup/intellij
    2) не включена обработка аннотаций - https://www.jetbrains.com/help/idea/annotation-pro...

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

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Логика реализации примерно следующая:
    вам нужен некий event listener, который отслеживает изменения полей. Если было изменено одно из полей, то берем значение этого поля и получаем тип (валюту) данного поля. А далее уже отправляем запрос по АПИ и получаем соответствующие котировки.
    Ответ написан
  • Разные ДТО для создания/получения объектов VS один ДТО, но запретить сериализацию null?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Как по мне лучше создавать отдельный DTO на каждую нужду вместо того, чтобы скомпоновать все в один.
    Например, UserCreationDTO, UserRequestDTO, UserResponseDTO и т.д.
    Ответ написан
    3 комментария
  • Стоит ли бросать кастомные ошибки, если этити не найдено в API?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Наверное, это зависит от того, как вы в команде договоритесь.
    Вы можете выбрасывать кастомные эксепшены, а далее ловить их в Controller или ControllerAdvice и отдавать соответствующее сообщение на клиент с кодом ошибки.
    Также можно обернуть entity в Optional и выбрасывать исключение orElseThrow() или возвращать другой объект (orElse()) или новый объект и т.д.

    Optional<Vote> voteOptional = voteRepository.findById(voteId);
            if(voteOptional.isEmpty()) {
                throw new ApiException("Vote with id " + id  + 
                        "is not in DB");
            }

    Можно же упростить:
    Vote vote = voteRepository.findById(voteId).orElseThrow(VoteNotFoundException::new);


    Но с другой стороны, если с фронта все правильно настроено, то таких ситуаций и не должно быть.

    не нужно надеяться на клиент. Например, человек может сам совершить запрос при помощи Postman и передать некорректное значение.
    Ответ написан
    8 комментариев
  • Стоит ли учить Spring если не знаю некоторые темы?

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

    но я не знаю такие темы как Аннотации, Коллекции, Обобщения, Многопоточность и т. д.

    Аннотации используются во всех современных библиотеках и фреймворках. Нужно знать хотя бы как они работают. В Spring, Hibernate также используются аннотации.
    Коллекции (JCF) - как по мне обязательный минимум, который нужно знать. В Spring вам придется работать с коллекциями.
    Обобщения (generics) - также достаточно широко используется, в том числе и в Спринг. Например, банальный конвертер (интерфейс Converter<S, T> и т.д.).
    До изучения Spring я бы рекомендовал вам изучить следующее:
    1) основы языка Java (все то, что вы перечислили выше).
    2) Ознакомиться с Java EE (сервлеты), глянуть на jdbc
    3) Изучить SQL (поиграться чуть с БД - MySQL, PostgreSQL и т.д.)
    4) Изучить Hibernate (ORM для работы с БД).
    5) Изучить TCP / IP. Изучить http методы (GET, POST, PUT и т.д.). Возможно, ознакомиться с сокетами.
    и только потом уже с имеющимися знаниями изучить Spring. При изучении Spring уже можно смотреть в сторону АОП и потихоньку изучить Spring AOP и т.д.
    Вот, курс по Spring Framework - https://www.youtube.com/watch?v=5ePo08sqcpk
    Курсов по Spring Boot полно. Есть неплохие на Udemy. Не лишним будет также изучение документации самого фреймворка. Также можете прочитать книгу Spring Boot in Action.

    Стоит ли мне учить Spring и доучивать эти темы вместе или сначала учить эти темы потом перейти к Spring?

    Сперва изучите эти темы, а потом уже Spring.

    https://javastudy.ru/interview/jee-spring-question...
    Ответ написан
    2 комментария
  • Как настроить бины в подпроектах без application.properties?

    azerphoenix
    @azerphoenix Куратор тега Spring
    Java Software Engineer
    Araya, как отметил коллега Ерлан Ибраев и я, стоит поднять отдельный config server (Spring Cloud Config).
    В таком случае при первом старте приложения сперва стартанет config server. Затем все остальные сервисы (eureka server, gateway и др.). Все сервисы получат конфиги из config server. Притом можно все конфиги напрямую получать из github репозитория. Для каждого из микросервисов можно создать свой properties || yml. Или же можно задать общий на всех. Можно также задать отдельные конфиги согласно активному профилю. Также при необходимости можно динамически изменять конфиги (например, при помощи Spring Cloud Bus).

    Вот, скрин, который поможет разобраться в вопросе:
    6116aa4e864f8269423104.png
    Вы можете все конфиги из всех микросервисов вынести в отдельный гит репозиторий (или же можно хранить локально. (профиль - native)). Внутри микросервисов достаточно файла bootstrap.yml или bootstrap.properties. Соответственно, все файлы конфигов вы называете именем вашего микросервиса (обратите внимание на скриншот выше).
    Ответ написан
    Комментировать
  • Где будет правильно расположить методы конвертации дто -> ентити и наоборот?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!

    Разместить прямо в дто в каждом.

    Почему бы вам не добавить методы конвертации в сервисный слой, где вы пишете вашу бизнес логику.
    Например, у вас есть entity User & dto - UserCreationDto. В сервисном слое UserService создайте 2 метода, которые конвертируют entity < -- > dto.
    Если вы используете встроенные возможности Spring (Converter<S, T>), то для каждого entity нужно создать свой класс. Что касается расположения пакетов, то есть разные практики. Например, в пакет user закинуть User, UserCreationDto, UserRepository, UserService, UserToDtoConverter и т.д.
    Если вы никак не кастомизируете процесс конвертации, то можно написать один базовый класс с использованием generics.
    Вот, простой пример для ModelMapper:
    @Service
    @RequiredArgsConstructor
    public class MapperService {
    
      private final ModelMapper modelMapper;
    
      /**
       * Note: outClass object must have default constructor with no arguments
       *
       * @param <D> type of result object.
       * @param <T> type of source object to map from.
       * @param entity entity that needs to be mapped.
       * @param outClass class of result object.
       * @return new object of <code>outClass</code> type.
       */
      public <D, T> D map(final T entity, Class<D> outClass) {
        return modelMapper.map(entity, outClass);
      }
    
      /**
       * Note: outClass object must have default constructor with no arguments
       *
       * @param entityList list of entities that needs to be mapped
       * @param outCLass class of result list element
       * @param <D> type of objects in result list
       * @param <T> type of entity in <code>entityList</code>
       * @return list of mapped object with <code><D></code> type.
       */
      public <D, T> List<D> mapAll(final Collection<T> entityList, Class<D> outCLass) {
        return entityList.stream().map(entity -> map(entity, outCLass)).collect(Collectors.toList());
      }
    
      /**
       * Maps {@code source} to {@code destination}.
       *
       * @param source object to map from
       * @param destination object to map to
       */
      public <S, D> D map(final S source, D destination) {
        modelMapper.map(source, destination);
        return destination;
      }
    }


    Создать отдельный класс DTOUtils и все туда скинуть ( но тогда там вперемешку будут методы конвертации всех классов )

    Не самая лучшая идея. Лучше так не делать. Вспоминаем про принцип единственной ответственности. (SOLID).

    Сделать пакет dtoutils и там создать много классов ( для каждого дто свой, они будут только хранить дто методы и все )

    Все зависит от вашего проекта. Иногда наличие одного пакета может быть оправданно, а иногда нет. Важно корректно сформировать структуру проекта.

    3 вариант выглядит как самый благоразумный, но создавать отдельный класс для одного метода это как-то не очень.

    Это вот, как раз тот случай, когда вы используете интерфейс Converter<S, T>
    https://docs.spring.io/spring-framework/docs/curre...
    Если не хотите создавать по одному классу на каждый dto, то можете глянуть на код указанный выше. Может, это будет для вас полезно
    Ответ написан
    4 комментария
  • Как во Vue отследить длинное удержание на элементе/экране?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Предположу, что этот подойдет вам:
    https://www.npmjs.com/package/vue-directive-long-press
    Ответ написан
    Комментировать
  • При переходе в корзину отображается главная страница?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Для начала прочитайте документацию к Woocommerce.
    я перенес папку cart из woocommerce в свою тему

    Вам нужно внутри темы создать директорию woocommerce, а директорию cart скопировать туда.
    Дальше уже надо смотреть, какие проблемы вылезут
    Источник:
    https://docs.woocommerce.com/document/template-str...
    Edit files in an upgrade-safe way using overrides. Copy the template into a directory within your theme named /woocommerce keeping the same file structure but removing the /templates/ subdirectory.
    Ответ написан
    Комментировать
  • Не могу найти что-то на что можно нажать. Как нажать на элемент?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Нажать можно на все что угодно, все зависит от того на что повешено событие (event).
    В данном случае событие висит на элементе div
    Вот, селектор div.card.mt-4.top-card
    O7JNhGv.png
    Ответ написан
    Комментировать
  • Как распространять программу java вместе с базой данных?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Можно использовать h2 БД. Его можно встраивать, а также сохранять в файловой системе. Также можно глянуть в сторону sqlite. Или же можно использовать postgres embedded.
    Для удобства работы с выбранной БД используйте ORM (hibernate, ormlite и др)
    Ответ написан
    Комментировать
  • Что использовать для авторизации/аутентификации пользователя на бекенде?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Почему бы вам не использовать Spring Boot + Spring Security? И добавить туда библиотеку, которую сами же указали - jjwt. Будет намного быстрее и проще. Но можно и без Spring'a обойтись.
    Ответ написан
  • Сохранение действий пользователя в программе java?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    1) Начнем с того, что вам нужно выбрать БД, в которой будете хранить данные. Например, sqlite.
    https://www.sqlite.org/index.html
    2) Вам нужен драйвер для работы с выбранной вами БД. В java - jdbc.
    https://github.com/xerial/sqlite-jdbc
    Для удобства можете освоить технологию ORM и изучить hibernate или mybatis и др. Можно взять минимум - ormlite.
    3) Далее вы получаете информацию введенную пользователем, при необходимости валидируете ее и записываете в БД.
    4) При последующем старте приложения данные в JTable заполняются из БД.
    https://www.youtube.com/watch?v=jpGn8rd_3Sc
    Ответ написан
    Комментировать
  • Какие есть способы организовать "общение" android-приложения с сервером?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день.
    Организовать "связь" для клиент-серверного приложения можно по http (спецификация REST), через soap, а также через сокеты и т.д.
    Довольно часто используется именно первый вариант. Есть куча библиотек и фреймворков для реализации. Вопрос, что именно вас интересует? Клиентская или серверная часть. Если речь о серверной части, то можно использовать Spring Web, Spring REST Repositories, Spring Webflux и др. Если речь о клиентской части, то у спринга есть Spring REST Android. А также можно использовать Retrofit, okHttp и т.д.
    Если речь идет о веб-сокетах, то можно на сервере использовать Spring Websockets или еще что
    Ответ написан
    Комментировать
  • Как сделать систему аукциона в вордпресс?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день
    Я бы не рекомендовал разрабатывать аукцион на ВП, хоть в теории это возможно. Если позволяет бюджет или знания, то создайте подобный проект на фреймворке.
    Плагины аукциона для ВП конечно же есть:
    https://ru.wordpress.org/plugins/ultimate-auction/
    https://ru.wordpress.org/plugins/wp-auctions/
    Можете еще поискать на codecanyon. Там куча плагинов.
    Можете попробовать подобрать более подходящий для вас
    Ответ написан
  • Как реализовать создание онлайн анкеты с вопросами и ответами?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Добрый день.
    Как отметил коллега Developer вопрос действительно обширен.
    Ну во-первых, вам нужны сущности User, Role & Privilege (необязательно). У каждого пользователя есть set ролей, каждая из которых содержит set привилегий. Есть роль ADMIN, а также например, USER.

    Я умею создавать обычную таблицу в БД , где уже есть определенные столбцы и не знаю как ее расширять по необходимости.

    Не совсем понятно, как именно вы создаете таблицы (db first || corde first). Для простоты используйте возможности Sping Data JPA.
    Что касается вопроса о расширении, то как правило, используют sql скрипты (патчи), которые кладут например, в resources и используют flyway. При перезапуске он применяет нужный sql файл. Также необходимые правки вносят в код сущности.

    Для анкеты необходимо создавать несколько таблиц (Для названия анкеты, названия ее вопросов и вариантов ответа) или все это лучше запихнуть в одну таблицу?

    Вы можете создать 1 сущность: анкета, которая содержит список вопросов. Список вопросов в свою очередь содержит список ответов. У каждого ответа есть напрмиер, некий флаг, является ли данный ответ верным или нет.
    В общем, существуют разные типы тестов и каждый из них отличается. Например, есть тесты, в которых есть правильный ответ. Есть тесты, в которых нет правльных ответов, но у каждого ответа есть балл, который впоследствии суммируется и выдается результат и т.д.
    Ответ написан
    2 комментария
  • Как сохранить фотографии в альбом вк при помощи vk api?

    azerphoenix
    @azerphoenix Куратор тега Java
    Java Software Engineer
    Добрый день!
    Вы получили json в ответе.
    Теперь, вам необходимо десериализовать ответ в объект.
    Можно использовать библиотеки jackson или gson или же можно использовать DOM Parser (встроенные средства java).

    Тут можете сгенерировать структуру json:
    https://www.jsonschema2pojo.org/

    Вот, для jackson:
    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({
    "markers_restarted",
    "photo",
    "sizes",
    "latitude",
    "longitude",
    "kid",
    "sizes2",
    "urls",
    "urls2"
    })
    @Generated("jsonschema2pojo")
    public class Photos {
    
    @JsonProperty("markers_restarted")
    public Boolean markersRestarted;
    @JsonProperty("photo")
    public String photo;
    @JsonProperty("sizes")
    public List<Object> sizes = null;
    @JsonProperty("latitude")
    public Integer latitude;
    @JsonProperty("longitude")
    public Integer longitude;
    @JsonProperty("kid")
    public String kid;
    @JsonProperty("sizes2")
    public List<List<String>> sizes2 = null;
    @JsonProperty("urls")
    public List<Object> urls = null;
    @JsonProperty("urls2")
    public List<String> urls2 = null;
    
    }


    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({
    "server",
    "photos_list",
    "aid",
    "hash"
    })
    @Generated("jsonschema2pojo")
    public class Example {
    
    @JsonProperty("server")
    public Integer server;
    @JsonProperty("photos_list")
    public List<Photos> photosList = null;
    @JsonProperty("aid")
    public Integer aid;
    @JsonProperty("hash")
    public String hash;
    
    }
    Ответ написан