我们的Spring应用程序将Spring Data Rest用于许多应用程序实体。我们遇到了间歇性错误,其中对应用程序的所有请求都会因以下异常而开始失败。
java.lang.IllegalArgumentException:无法解析[插入随机实体]的存储库元数据。 在org.springframework.data.rest.webmvc.config.ResourceMetadataHandlerMethodArgumentResolver.resolveArgument(ResourceMetadataHandlerMethodArgumentResolver.java:97) 在org.springframework.data.rest.webmvc.config.RootResourceInformationHandlerMethodArgumentResolver.resolveArgument(RootResourceInformationHandlerMethodArgumentResolver.java:83)处 在org.springframework.data.rest.webmvc.config.RootResourceInformationHandlerMethodArgumentResolver.resolveArgument(RootResourceInformationHandlerMethodArgumentResolver.java:40)
它不容易复制,并且消息无法解析[实体]的存储库元数据在我们的应用程序中始终引用随机实体。这使我认为这不是我们最终的配置问题。我们正在使用Spring Boot的2.1.3版本。对故障排除有什么建议吗?有人遇到这个吗?
作为参考,引发异常的Spring代码如下所示:
public ResourceMetadata resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
String lookupPath = this.baseUri.getRepositoryLookupPath(webRequest);
String repositoryKey = UriUtils.findMappingVariable("repository", parameter.getMethod(), lookupPath);
if (!StringUtils.hasText(repositoryKey)) {
return null;
} else {
Iterator var7 = this.repositories.iterator();
ResourceMetadata mapping;
do {
if (!var7.hasNext()) {
throw new IllegalArgumentException(String.format("Could not resolve repository metadata for %s.", repositoryKey));
}
Class<?> domainType = (Class)var7.next();
mapping = this.mappings.getMetadataFor(domainType);
} while(!mapping.getPath().matches(repositoryKey) || !mapping.isExported());
return mapping;
}
}
我不确定是什么使存储库迭代器突然变空。