В моем приложении Spring Boot 1.5.12 с Spring Data REST и Spring Security тривиальное отображение удаления работает неправильно, когда я запускаю DELETE
через curl
:
curl -u 'admin:password' -X DELETE http://localhost:8080/api/shoes/20
Сбой сервера приисключение REST Spring Data:
ResourceNotFoundException: Resource not found!
при попытке разрешить нелепый URL:
/api/shoes/api/shoes/20
, что выглядит как комбинация /api/shoes
(ресурс) и /api/shoes/20
(удаляемый элемент).Этот URL, конечно, не существует ... но откуда этот URL?Конечная точка тривиальна (с помощью Lombok):
@RepositoryRestController
@AllArgsConstructor
@Slf4j
public class ShoeRepositoryRestController {
@DeleteMapping("/shoes/{id}")
public void delete(@PathVariable("id") Long shoeId) {
log.error("handle delete");
}
}
, которая печатает сообщение об ошибке в журнале, за которым следует ResourceNotFoundException
.Хранилище также является общим:
@RepositoryRestResource(collectionResourceRel = "shoes", path = "shoes")
public interface ShoeRepository extends PagingAndSortingRepository<Shoe, Long> {
// a set of query methods...
}
И конфигурация WebSecurity
разрешает удаление (очевидно):
.antMatchers(HttpMethod.DELETE, "/api/shoes/**").hasRole("MANAGER")
Возможно, Spring Security пытается что-то сделать с отправленным URL (/api/shoes/20
) после, по-видимому, успешной обработки, и что-то не так как-то неправильно.После обработчика удаления перенаправление отсутствует.
Есть идеи, что может быть не так?