изучаю принципы REST, остановился на обновлении сущности. Не могу понять, как в сущность передать поля, которые передаю в запросе и затем обновить их у существующей записи в БД. Пробовал через рефлексию, но через нее не обновляются связи в БД. Ниже не рабочий метод update из абстрактного класса. Часть кода с рефлексией закомментирована, хотелось бы обойтись без нее.
@RequestMapping(value = "{id}", method = RequestMethod.PATCH, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<T> update(@PathVariable Long id, @RequestBody T t) {
T e = (T) getService().findById(id);
if (e == null) {
getLogger().warn("Entity: {} not found in method /update", id);
throw new EntityNotFoundException(id);
}
/*
for (Map.Entry<Object, Object> map : entity.entrySet()) {
Field fielde = ReflectionUtils.findField(getEntityClass(), map.getKey());
fielde.setAccessible(true);
ReflectionUtils.setField(fielde, e, map.getValue());
}
*/
getService().update(e);
getLogger().info("Entity: {} successful updated", e);
return new ResponseEntity<>(e, HttpStatus.OK);
}
Пример поля со связью, которое пытаюсь обновить:
класс Project:
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
@JoinTable(name = "user_project",
joinColumns = {@JoinColumn(name = "project_id", referencedColumnName = "id")},
inverseJoinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id")}
)
@LazyCollection(LazyCollectionOption.FALSE)
@Fetch(FetchMode.SELECT)
private List<User> team = new ArrayList<>();
класс User:
@JsonIgnore
@ManyToMany(mappedBy = "team", fetch = FetchType.LAZY)
@LazyCollection(LazyCollectionOption.FALSE)
@Fetch(FetchMode.SELECT)
private List<Project> projects;
Что имею в виду под "не обновляются связи в БД через рефлексию" : Передаю запрос в таком виде:
{
"projects": [{"id":45}]
}
Возвращается обновленная сущность, но в поле project передано просто значение, а не объект:
{
"id": 7,
"name": "Олег",
"login": "omaslo",
"password": "123",
"city": "Москва",
"phoneNumber": "555",
"position": null,
"tasks": [],
"deleted": null,
"project": [
{
"id": 45
}
],
"posotionUser": null
}
А должно быть как-то так:
{
"id": 45,
"name": "RU06297",
"endCustomer": {
"id": 8,
"name": "ЗапСибНефтехим",
"contactPersonName": "Валерий",
"contactPersonPhone": "111",
"adressLegal": "Адрес",
"adressSend": "Адрес",
"adressDelivery": "Адрес"
},
"team": []
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Я пытаюсь получить доступ к открытым web-service Публичной кадастровой карты гМосквы
Всем привет:) Не могу фон сделать под размер страницы, постоянно фон как бы не помещается на страницуВсе говорят про background-size: cover; Но он у меня...