编程语言
首页 > 编程语言> > java-Spring Data Rest存储库不会公开删除

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