Как запретить обновление поля при исправлении с помощью Java JSON Patch - PullRequest
0 голосов
/ 01 мая 2020

У меня есть проект весенней загрузки, содержащий 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" }]

1 Ответ

0 голосов
/ 01 мая 2020

Можете ли вы попробовать следующий код, после сохранения сущности любые последующие обновления отбрасываются, если для столбца идентификатора задано значение updatable = false

class Person {

     @Id @GeneratedValue
     @Column(name = "id", updatable = false, nullable = false)
     Long id;
     @NotNull @NotBlank String name;
     @NotNull @NotBlank String surname
}
...