У меня есть проект, в котором я использую Spring MVC + Jackson для создания службы REST. Скажем, у меня есть следующий объект java
public class MyEntity {
private Integer id;
private boolean aBoolean;
private String aVeryBigString;
//getter & setters
}
Иногда я просто хочу обновить логическое значение, и я не думаю, что отправка всего объекта с его большой строкой - хорошая идея просто обновить простое булево значение. Итак, я рассмотрел использование метода PATCH HTTP для отправки только тех полей, которые необходимо обновить. Итак, я объявляю следующий метод в контроллере:
@RequestMapping(method = RequestMethod.PATCH)
public void patch(@RequestBody MyVariable myVariable) {
//calling a service to update the entity
}
Проблема заключается в следующем: как узнать, какие поля необходимо обновить? Например, если клиент просто хочет обновить логическое значение, я получу объект с пустой "aVeryBigString". Как я должен знать, что пользователь просто хочет обновить логическое значение, но не хочет выпустить строку?
Я "решил" проблему, создав настраиваемые URL-адреса. Например, следующий URL: POST/myentities/1/aboolean/true будет сопоставлен методу, который позволяет только обновлять логическое значение. Проблема с этим решением заключается в том, что он не соответствует требованиям REST. Я не хочу быть совместимым с REST на 100%, но мне не очень удобно предоставлять настраиваемый URL-адрес для обновления каждого поля (особенно учитывая, что он вызывает проблемы, когда я хочу обновить несколько полей).
Другим решением было бы разделить "MyEntity" на несколько ресурсов и просто обновить эти ресурсы, но я чувствую, что это не имеет смысла: "MyEntity" есть простой ресурс, это не состоит из других ресурсов.
Итак, есть ли элегантный способ решения этой проблемы?