У меня есть требование для реализации метода HTTP PATCH в приложении Spring MVC. Я следовал этому уроку: https://www.baeldung.com/http-put-patch-difference-spring.
Это кусок кода:
@RequestMapping(value = "/heavyresource/{id}", method = RequestMethod.PATCH, consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> partialUpdateGeneric(
@RequestBody Map<String, Object> updates,
@PathVariable("id") String id) {
heavyResourceRepository.save(updates, id);
return ResponseEntity.ok("resource updated");
}
Проблема в том, что в моем хранилище (JPARepository) нет метода «сохранить», где я могу передать карту и идентификатор.
Я попробовал эту реализацию самостоятельно:
@PatchMapping("/heavyresource/{id}")
public Beer patchUpdate(@RequestBody HeavyResource heavyResource) {
return heavyResourceRepository.save(heavyResource);
}
Но это не работает должным образом, потому что, если я передаю только одно свойство (это точка в PATCH), все остальные свойства становятся нулевыми, и мне нужно обновить только переданное свойство. Даже думать в DTO я не смог реализовать.
Спасибо!