сейчас у меня есть метод для редактирования элементов. Обработчик GET (используется для рисования HTML-формы) выглядит так:
@RequestMapping(value = "/item/{id}", method = RequestMethod.GET)
public String editItem(HttpServletRequest request, Model model, @PathVariable String id) {
model.addAttribute("item", itemServive.getById(id));
return "item";
}
Когда я отправляю эту форму, вызывается метод PUT, который выглядит следующим образом:
@RequestMapping(value = "/item", method = RequestMethod.PUT)
public ModelAndView updateCustomer(HttpServletRequest request
, @Valid Item item
, BindingResult bindingResult
, RedirectAttributes redirectAttributes) {
ModelAndView modelAndView = new ModelAndView("/item/"+item.getId());
if (!bindingResult.hasErrors()) {
itemService.update(item);
}
return modelAndView;
}
Теперь предположим, что у меня есть поле с именем "code" в этом элементе, которое я не хочу обновлять. Я должен показать его в форме (по крайней мере, скрытой), потому что если нет, он будет установлен в NULL. Проблема использования скрытого ввода заключается в том, что я могу отредактировать это значение и отправить другое при отправке формы. Я думаю, я не могу заставить элемент обновляться снова и установить только те значения, которые я хочу изменить:
Item toUpdate = itemService.getById(item.getId());
toUpdate.setName(item.getName());
toUpdate.setPrice(item.getPrice());
// etc etc
itemService.update(toUpdate);
Но это выглядит не очень оптимально. Есть ли лучший способ сделать это?
Спасибо!