Простая команда curl вызывает эту нелепость - PullRequest
0 голосов
/ 15 мая 2018

В моем приложении 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) после, по-видимому, успешной обработки, и что-то не так как-то неправильно.После обработчика удаления перенаправление отсутствует.

Есть идеи, что может быть не так?

1 Ответ

0 голосов
/ 16 мая 2018

Тьфу! Добавьте ответную сущность return:

  @DeleteMapping("/shoes/{id}")
  public ResponseEntity<?> delete(@PathVariable("id") Long shoeId) {
    log.error("handle delete");
    return ResponseEntity.ok().build();
  }

Должна быть лучшая обработка этой ошибки программирования ...

...