2016-04-27 4 views
3

У меня есть хранилище для объекта пользователя, и я пытаюсь выставить удалить путем копирования подписи из хранилища CRUD:Spring Data Rest Repository не подвергнет удалить

public interface UserRepository extends Repository<User, String>{ 
    @RestResource(exported = false) 
    User findOne(String username); 

    @PreAuthorize("hasRole('ROLE_USERS_READ')") 
    List<User> findAll(); 

    @PreAuthorize("hasRole('ROLE_USERS_WRITE')") 
    User save(User user); 

    @PreAuthorize("hasRole('ROLE_USERS_WRITE')") 
    void delete(String username); 

    @PreAuthorize("hasRole('ROLE_USERS_WRITE')") 
    void delete(User user); 
} 

Сохранение пользователя работает отлично:

Request URL:http://localhost:8080/api/users 
Request Method:POST 
Status Code:201 Created 

Но когда я пытаюсь удалить пользователя я получаю HTTP 405 ошибка, которая от того, что я понимаю, означает, что метод удаления не подвергаясь:

Request URL:http://localhost:8080/api/users/testUser3 
Request Method:DELETE 
Status Code:405 Method Not Allowed 

Когда я делаю вызов для удаления с использованием CrudRepository, он работает. Любая помощь или совет будут оценены.

Спасибо, идо

ответ

3

Я нашел причину: T findOne (ID идентификатор) и недействительным удаления (ID идентификатор), так или иначе связаны между собой. Когда я удалил аннотацию @RestResource (exported = false) из findOne, удалите ее. Кажется, это ошибка, или недокументированное поведение.

Я не обнаружил findOne, потому что мой сервер использовал его для аутентификации, поэтому я не мог комментировать его с помощью @PreAuthorize. То, что я в конечном итоге делаю это добавление отдельного метода для сервера:

@PreAuthorize("hasRole('ROLE_USERS_READ')") 
User findOne(String username); 

@RestResource(exported = false) 
User getUserByUsername(String username); 

Надеется, что это помогает кому-то.

+0

Это работает, спасибо за предложение –

Смежные вопросы