Скажем, у меня есть класс Foo и jax-rs FooResource, который предоставляет API для CRUD Foos.
Foo представляет собой документ MongoDB.
В FooResource у меня будет что-то вроде этого:
@PATCH
@Path("{id}")
public Response update(@PathParam("id") ObjectId id, Foo foo) {
return Response.ok(fooService.update(id, foo)).build();
}
Проблема в том, что объект foo в json будет содержать только те поля, которые изменились, но я никогда не знаю заранее, какие это будут поля.
Я использую Quarkus с расширением Panache, и единственный способ, который я вижу, - это получить объект из БД, а затем проверить каждое поле в объекте foo, который я получил из HTTP-запроса, чтобы узнать, имеет ли он значение null или нет, а если нет, установите новое значение в сущности и в конце вызовите для него update ().
Но это стало бы кошмаром, если бы у меня был класс с десятками полей. Это настолько распространенный вариант использования, что я не могу представить (или не хочу верить), что это единственный способ сделать это.
Если бы существовал способ отправить неполный документ в MongoDB, чтобы он позаботился об изменении только полей, присутствующих в этом документе, это было бы идеально. Но я не нашел способа сделать это. Ни с quarkus (с размахом или без него), ни с драйвером java для mongo API.
Так есть ли более простой способ сделать это? Я предпочитаю решение с quarkus MongoDB с расширением Panache, но решение без Panache или даже напрямую с API драйвера java было бы в порядке.
PS: отправка полного объекта из внешнего интерфейса и замена всего документа для меня не вариант.
Спасибо.