Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2020, 13:34   #1
KenesK
Пользователь
 
Регистрация: 28.11.2013
Сообщений: 15
По умолчанию Проблемы при Id

Всем доброго! Есть сервис который производит CRUD операции для User-ов, все это через Dto и Repo.Были проблемы при операции createUser, нужно было для фронта (Swagger) исключить поле Id, так как айдишник генерится на Бэке.Я его убрал из Dto, и теперь при createUser проблем нет, вот только проблемы появились при updateUser, все это раньше работало пока я не убрал поле (userDto.setId(userEntity.getId())) , так как до этого я в userDto исключил Id что бы не присваивалось при создании. И теперь при updateUser он не изменяет его, а сохраняет как новый, как выйти из этой ситуации?
userDto:
Код:
public class UserDto {

    //private Long id;
    private String fullName;
    private int age;
    private String phone;
    private boolean inState;

}
userEntity:
Код:
public class UserEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @NotBlank
    @Column(name = "full_name", nullable = false)
    private String fullName;

    @Column(name = "age", nullable = false)
    private int age;

    @NotBlank
    @Column(name = "phone", nullable = false)
    private String phone;

    @Column(name = "in_state", nullable = false)
    private boolean inState;

}
userController:
Код:
    @PostMapping(value = "/addUser", consumes = MediaType.APPLICATION_JSON_VALUE, produces =
            MediaType.APPLICATION_JSON_VALUE)
    public void createUser(@RequestBody UserDto userDto) {
        UserEntity userEntity = toEntity(userDto);
        UserEntity userEntity1 = userRepo.save(userEntity);
    }

    @PostMapping(value = "/updateUser/{id}", consumes = MediaType.APPLICATION_JSON_VALUE, produces =
            MediaType.APPLICATION_JSON_VALUE)
    public void updateUser(@PathVariable(value = "id") Long id, @Valid @RequestBody UserDto usrDetail) {
        UserDto userDto = toDto(userRepo.findById(id)
                .orElseThrow(() -> new ResourceNotFoundException("User", "id", id)));
        //userDto.setId(usrDetail.getId);
        userDto.setFullName(usrDetail.getFullName());
        userDto.setInState(usrDetail.isInState());
        userDto.setAge(usrDetail.getAge());
        userDto.setPhone(usrDetail.getPhone());
        UserEntity userEntity = toEntity(userDto);
        userRepo.save(userEntity);
    }
KenesK вне форума Ответить с цитированием
Старый 04.04.2020, 15:02   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Здесь есть 2 возможных варианта.

Первый. При создании в Id передавать 0 или null.
Второй. Использовать разные DTO. Один для создания (без Id). Другой для поиска и обновления (с Id).

Как-то так...
Streletz вне форума Ответить с цитированием
Старый 04.04.2020, 15:28   #3
KenesK
Пользователь
 
Регистрация: 28.11.2013
Сообщений: 15
По умолчанию

Streletz, а можно ли id вернуть в Dto, но при создании Юзера скрыть поле Id для фронта?
KenesK вне форума Ответить с цитированием
Старый 04.04.2020, 15:48   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от KenesK Посмотреть сообщение
можно ли id вернуть в Dto, но при создании Юзера скрыть поле Id для фронта?
Это можно сделать, если Вы используете два разных класса DTO. Один приходит с фронта на бэк с исходными данными. Второй возвращается с бэка на фронт после завершения операции. В одном и том же классе DTO это не получится. Поле класса (что id, что любое другое) оно либо есть, либо его нет.

Последний раз редактировалось Streletz; 04.04.2020 в 16:12.
Streletz вне форума Ответить с цитированием
Старый 04.04.2020, 16:01   #5
KenesK
Пользователь
 
Регистрация: 28.11.2013
Сообщений: 15
По умолчанию

Streletz, понял, спасибо
KenesK вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с SQL qwq C# (си шарп) 10 29.12.2015 09:41
Проблемы с РРЦ Bigi653 Свободное общение 4 11.11.2015 16:54
Проблемы с vba (проблемы создания макросов) Leojse Microsoft Office Excel 4 26.12.2013 20:09
проблемы с Qt CodeNOT Qt и кроссплатформенное программирование С/С++ 3 27.03.2012 12:17
ПРОБЛЕМЫ С HDD DodgeLS Компьютерное железо 21 03.03.2011 03:13