如何解决Spring在生产和测试中生成不同的HATEOAS链接 到目前为止的调查
在我的春季启动应用程序中,我正在做RepositoryEntityLinks#linkToItemResource
创建一个hateoas链接,但是在生产和测试中得到不同的结果。
呼叫
注入的repositoryEntityLinks.linkToItemResource(New.class,item.getId())
上的RepositoryEntityLinks
导致
"new": {
"href": "http://localhost:8080/api/news/13244{?projection}","templated": true
}
以及在我的集成测试中
"new": {
"href": "http://localhost:8080/api/new/13244"
}
。
特别是缺少的多元性破坏了我的考验。
示例测试:
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,properties="spring.datasource.name=te2et")
@EnableAutoConfiguration(exclude = { ElasticSearchRestHealthContributorAutoConfiguration.class })
class TimelineEndpointE2ET extends E2EBaseTest {
@MockBean
NewRepository newRepository;
@Test
void test() {
// my rest assured test
}
}
(我已经发现,New
可能是一个实体的坏名字,但我认为这并不是错)
到目前为止的调查
在生产中,我使用EvoInflectorTypeBasedCollectionResourceMapping
负责实体名称的多元化。另一方面,测试使用MappingResourceMetadata
。
启动时,RepositoryResourceMappings#populateCache
将为所有注册的存储库创建映射并使用EvoInflectorTypeBasedCollectionResourceMapping
。
由于我对NewRepository
的嘲笑,此存储库未被发现,因此不会放入该缓存中。
稍后,当调用RepositoryEntityLinks#linkToItemResource
时,PersistentEntitiesResourceMappings
将创建MappingResourceMetadata
的映射(而不是EvoInflectorTypeBasedCollectionResourceMapping
)。
问题是问自己:
- 为什么未发现MockBean?
- 为什么在启动时填充缓存以及以后进行临时添加时使用不同的
ResourceMapping
?
我认为我在这里缺少很多重要信息,希望有人能指导我正确的方向。
谢谢!
我正在使用Spring Boot 2.2.4.RELEASE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。