У меня есть проект весенней загрузки, содержащий Pojo с именем Person и контроллер, который позволяет пользователю получить человека по Id и установить Patch для объекта Person, чтобы его имя или / и фамилия могли быть обновлены.
Person Pojo (упрощенно для целей примера)
class Person {
@Id @GeneratedValue Long id;
@NotNull @NotBlank String name;
@NotNull @NotBlank String surname
}
В контроллере
@PatchMapping(path = "/{personId}", consumes = "application/json-patch+json")
ResponseEntity<Trip> patchPerson(@PathVariable Long personId,
@RequestBody final JsonPatch jsonPatch) throws JsonProcessingException, JsonPatchException {
final Person targetPerson = personRepository.findOne(personId);
final ObjectMapper objectMapper = new ObjectMapper();
final JsonNode patch = objectMapper.convertValue(targetPerson, JsonNode.class);
JsonNode patched = jsonPatch.apply(patch);
final Person updatedPerson = objectMapper.treeToValue(patched, Person.class);
Как лучше всего добиться следующего поведения?
- Отправить все поля как ответ при получении запроса GET.
- Не разрешать пользователю обновлять идентификатор при отправке исправления. Только имя и фамилия могут быть обновлены.
Добавление примера патча, который я отправляю
[{ "op": "replace", "path":"/id", "value":"200" }]