Spring Data Rest:IllegalArgumentException间歇性错误

时间:2019-05-28 16:51:36

标签: java spring spring-boot

我们的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;
    }
}

我不确定是什么使存储库迭代器突然变空。

0 个答案:

没有答案