我注意到ReadOnly存储库的行为很奇怪,想知道是否还有其他人看到类似的问题。
我已经创建了SDR文档中提到的只读存储库接口。如您所见,类的主体只是内置的CrudRepository的复制粘贴,只保留了GET方法。
MyReadOnlyRespository.java
@NoRepositoryBean
public interface MyReadOnlyRespository<T, ID extends Serializable> extends Repository<T, ID>{
Optional<T> findById(ID id);
boolean existsById(ID id);
Iterable<T> findAll();
Iterable<T> findAllById(Iterable<ID> ids);
long count();
}
这是扩展自定义只读存储库的UserRepostiory。
UserRepository.java
@RepositoryRestResource(path="users", collectionResourceRel="users")
public interface UserRepository extends MyReadOnlyRespository<User, Integer> {
}
使用此配置,当我访问http://localhost:8080/services/users时,可以看到以下预期的响应。
{
"_embedded": {
"users": [
{
....
"_links": {
"self": {
"href": "http://localhost:8080/services/users/1"
},
"user": {
"href": "http://localhost:8080/services/users/1"
}
}
}
]
},
"_links": {
"self": {
"href": "http://localhost:8080/services/users"
},
"profile": {
"href": "http://localhost:8080/services/profile/users"
}
}
}
但是当我尝试通过使用URL访问特定用户时,我得到了方法不受支持的错误。 http://localhost:8080/services/users/1。
但是,如果我从内置的CrudRepository而不是自定义MyReadOnlyRepository扩展了UserRepository,则上述特定用户的URL将提供预期的响应。那有什么呢?自定义存储库为什么会失败?