Задать вопрос
  • Почему не сохраняется venv в Docker контейнере?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    FROM python:alpine3.14
    
    WORKDIR /home/project
    
    RUN python -m venv /home/project/env
    Ответ написан
    3 комментария
  • Как дозаполнить корректно поля для 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 комментарий
  • Как определить разные сообщения в HTTP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    2 комментария