У меня есть проект весенней загрузки, содержащий Pojo с именем Person и контроллер, который позволяет пользователю получать человека по идентификатору и исправлять объект Person, чтобы его имя или/и фамилия могли быть обновлены.
The 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" }]
@JsonView
от Джексона. Может быть, вы найдете более приятное решение. Учебник здесь: baeldung.com/jackson-json-view-annotation - person yodamad   schedule 01.05.2020