Не получается красиво написать. Так, чтобы не стыдно было. Код-то заработал.
Если по “хорошим практикам” - у тебя должно быть DTO и отдельно сущность. DTO приходит в контроллер, спринг маппит вход. данные на DTO, дальше ты маппишь с помощью например мэпстракта свой dto на entity. Или маппишь вручную.