Я читаю учебник по именованию ресурсов REST ...
http://api.example.com/device-management/managed-devices/{id}/scripts/{id}:clone
Это пример наилучшей практики именования, но я не знаю, как объявить это с помощью аннотации @PathVariable и отличить один {id} от {id}:clone.
public ResponseEntity<?> clone (
HttpServletRequest request,
@PathVariable long id, ...) {
..
}





Вам нужно различать два идентификатора по имени переменной или по атрибуту value от @PathVariable, например:
@GetMapping("http://api.example.com/device-management/managed-devices/{idManagedDevice}/scripts/{idScript}"
public ResponseEntity<?> clone (HttpServletRequest request,
@PathVariable long idManagedDevice,
@PathVariable long idScript,
) {
..
}
Или же:
@GetMapping("http://api.example.com/device-management/managed-devices/{id}/scripts/{idScript}"
public ResponseEntity<?> clone (HttpServletRequest request,
@PathVariable(value = "id") long idOfManagedDevice,
@PathVariable(value = "idScript") long idOfScript,
) {
..
}