Я хочу спросить, есть ли способ решить следующую проблему элегантным способом.Java REST Частичное обновление булевых полей
У меня есть приложение Java Rest, использующее JPA и Jersey. Я хочу иметь возможность частично обновлять свои модели.
Я делаю это одним способом (обновлением), который будет проверять предоставленные поля (! = Null) и только обновлять их. Он отлично работает для всех полей, кроме полей типа boolean.
Я бы очень признателен, если вы можете дать некоторые идеи. Я думал о булеанском типе, но это не кажется очень изящным.
Часть ресурса:
...
@PUT
@Path("{id:[0-9][0-9]*}")
@Consumes(MediaType.APPLICATION_JSON)
public Response update((@PathParam("id") long id, Event event) {
Event _event = dao.find(id);
if (event.getTitle()!=null) _event.setTitle(event.getTitle());
// in case variable finished is not provided we should not change anything
// if (event.getFinished()!=null) _event.setFinished(event.getFinished());
dao.update(id, _event);
}
...
Модель часть:
@Entity
@XmlRootElement
public class Event implements Serializable {
private String title;
private boolean finished = false;
public Event(){}
// getters, setters
...
}
Javascript часть:
// Those ones work
Event.post({id:12, title:"Meet with Joe", finished:true} // update all fields
Event.post({id:12, title:"Meet with Barack", finished:false} // update all fields
Event.post({id:12, finished:false} // partial update of boolean fields
// How to achieve this one without affecting other boolean fields?
Event.post({id:12, title:"Meet with Joe"}
// We haven't provided "finished" value. We don't want to change it.
// But system will update unprovided boolean field value with default.
Я думаю, что ваша модель не отражает ваш прецедент (ы). У вас есть несколько типов событий, но вы хотите сохранить их в одном общем событии? Можете ли вы предсказать, сколько вариантов событий у вас будет? Можете ли вы привести несколько примеров этих изменений? – zbig
Существует только один класс Event. Кроме того, есть еще 10 таких файлов, как id, startDate, endDate. когда я хочу использовать поле, которое не должно сохраняться, я просто добавляю @Transient. – Emin