SDR-只读存储库与CrudRepository

时间:2018-12-28 20:29:26

标签: spring spring-data-rest

我注意到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将提供预期的响应。那有什么呢?自定义存储库为什么会失败?

0 个答案:

没有答案