Итак, я знаю, что в REST, обычно, когда я делаю PUT-запрос, я должен указать ресурс, который я хочу обновить, в URL-адресе, например, так: .../collections/{collectionId}
Реализация этого при весенней загрузке дляМой ресурс Role выглядит следующим образом:
@RepositoryRestController
@RequestMapping("/roles")
public class RoleController {
private RoleRepository roleRepository;
@Autowired
public RoleController(RoleRepository roleRepository) {
this.roleRepository = roleRepository;
}
@PutMapping("/{roleId}")
public @ResponseBody ResponseEntity<Role> putRole(@PathVariable long roleId, @RequestBody Role newRole) {
Optional<Role> roleOptional = this.roleRepository.findById(roleId);
if(roleOptional.isPresent()) {
Role roleToBeSaved = roleOptional.get();
roleToBeSaved.name = newRole.name;
roleToBeSaved.description = newRole.description;
// set more attribute
this.roleRepository.save(roleToBeSaved);
return ResponseEntity.ok(roleToBeSaved);
}
throw new RoleNotFoundException('could not find role with id + ' + roleId);
}
}
Но это не так, как нужно, потому что newRole внутри RequestBody уже содержит идентификатор, поэтому я мог бы просто сделать вместо этого:
@PutMapping("/{roleId}")
public @ResponseBody ResponseEntity<Role> putRole(@PathVariable long roleId, @RequestBody Role newRole) {
this.roleRepository.save(newRole);
return ResponseEntity.ok(newRole);
}
Это приводит к неиспользованному PathVariable, но мне это не нужно, потому что newRole уже содержит идентификатор. Итак, каков оптимальный способ выполнения PUT-запроса, подобного этому?
Редактировать: очевидно, я мог бы просто изменить URL-адрес на что-то вроде .../roles/role
, не имея PathVariable и просто отправив newRole внутри RequestBody. Но это не то, как должен выглядеть URL-адрес PUT-запроса, верно?