java-Spring Data Rest存储库不会公开删除
作者:互联网
我有一个User对象的存储库,并且我试图通过从CRUD存储库复制签名来公开删除:
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错误,据我所知,这意味着未公开delete方法:
Request URL:http://localhost:8080/api/users/testUser3
Request Method:DELETE
Status Code:405 Method Not Allowed
当我使用CrudRepository进行删除调用时,它可以工作.
任何帮助或建议,将不胜感激.
谢谢,
我做
解决方法:
我找到了原因:
T findOne(ID id)和void delete(ID id)以某种方式连接.
当我从findOne删除@RestResource(exported = false)批注时,删除开始工作.
对我来说似乎是个错误,或未记录的行为.
我没有公开findOne,因为我的服务器正在使用它进行身份验证,因此无法使用@PreAuthorize对其进行注释.
我最终要做的是为服务器添加一个单独的方法:
@PreAuthorize("hasRole('ROLE_USERS_READ')")
User findOne(String username);
@RestResource(exported = false)
User getUserByUsername(String username);
希望这对某人有帮助.
标签:spring-data-rest,java 来源: https://codeday.me/bug/20191027/1941754.html