Есть CRUD API к Entity. Entity имеет поля id и someString Состоит из трех слоев : Controller, Service, Repository Естественно контроллер знает только о сервисе, а сервис только о репозитории Между клиентом и сервером jakson маршалит Entity(json).
в контроллере есть такие методы
Entity getById(@PathVariable Long id)
Entity create(@RequestBody Entity entity)
void delete(@PathVariable Long id)
Entity update(@PathVariable Long id, @RequestBody Entity entity)
аналогичные методы присутствуют и в сервисе
Используется Spring Data и соответственно JpaRepository. как известно у нее по умолчанию нет метода update. И создание и обновление entity решаетcя с помощью метода save. Соответственно если мы передаем в метод save Entity с установленным ID то происходит обновление оного, в противном случае создается новая запись в БД.
А вопрос состоит вот в чем:
Где нужно валидировать Entity от клиента, залетающая в метод create контроллера, на присутствие id в ней дабы вместо создания записи не произошла правка уже существующей: в сервисе, в контроллере или самой модели.
Где нужно проверять наличие Entity в базе, залетающая в метод update, перед тем как апдейтить запись дабы не создать новую.
Валидируйте в слое сервиса.
Если нет ограничения на количество запросов к базе, то сначала проверьте есть ли сущность с таким id. Если ограничение есть, то кешируйте id, немного сэкономите.
Это всё должно разруливаться на уровне контроллера, принимающего запрос и данные. Поясню, что имею ввиду: если мы хотим создать Entity, то выполняем запрос методом POST, если нам нужно изменить существующую Entity, то выполняем запрос методом PUT.
Валидировать данные нужно во-первх на клиенте (JavaScript), во-вторых на сервере (есть у спринга интерфейс Validator и аннотация @Validated).
В итоге имеем в контроллере такие методы
@RequestMapping(method = RequestMethod.POST)
Entity create(@RequestBody @Validated Entity entity)
@RequestMapping(value = "{id}", method = RequestMethod.PUT)
Entity update(@PathVariable Long id, @RequestBody @Validated Entity entity)
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня есть CustomView который рисует текст по ширинеНа андроиде 7
Добрый день помогите разобраться с запросамиЕсть два JSON
С рекурсией решается быстрее, если искать до 21 числа, а вот все что больше уже намного быстрее решается простым сложениемПочему с рекурсией...
ЗдравствуйтеУ меня есть одна задача и я пока не знаю как ее решить