Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据Rest资源处理失败_Java_Spring_Spring Mvc_Spring Data Rest - Fatal编程技术网

Java Spring数据Rest资源处理失败

Java Spring数据Rest资源处理失败,java,spring,spring-mvc,spring-data-rest,Java,Spring,Spring Mvc,Spring Data Rest,我试图使用SpringDataREST资源处理器来添加到资源的链接;但是,在MockMvc集成测试期间,它出现了一个类强制转换异常,抱怨EmptyCollectionEmbeddedWrapper无法转换为ResourceSupport(ResourceProcessor参数化类型的边界): 此时返回的值应该是空的(正如EmptyCollectionEmbeddedWrapper所建议的那样),但是当然,类强制转换不是有意的。正如堆栈跟踪所示,此异常发生在资源后处理期间;如果我删除了一个用于此类

我试图使用SpringDataREST资源处理器来添加到资源的链接;但是,在
MockMvc
集成测试期间,它出现了一个类强制转换异常,抱怨
EmptyCollectionEmbeddedWrapper
无法转换为
ResourceSupport
ResourceProcessor
参数化类型的边界):

此时返回的值应该是空的(正如
EmptyCollectionEmbeddedWrapper
所建议的那样),但是当然,类强制转换不是有意的。正如堆栈跟踪所示,此异常发生在资源后处理期间;如果我删除了一个用于此类型的简单资源处理器,则类强制转换异常将消失,请求将成功。这让我感到惊讶,因为资源处理器基本上是从文档中提出来的

更详细地说,资源参数类型是
通知
;失败的
MockMvc
请求如下所示:

perform(get(entityLinks.linkToSearchResource(Notification.class, NotificationRepository.ACTIVE_SEARCH)
            .expand(Collections.singletonMap("projectId", 1)).getHref()))
            .andExpect(status().isOk())
            .andExpect(jsonPath("$._embedded.notifications").isEmpty());
ResourceProcessor
看起来像:

@Bean
public ResourceProcessor<Resource<Notification>> notificationResourceProcessor(RepositoryEntityLinks entityLinks) {
    return notificationResource -> {
        notificationResource.add(entityLinks.linkToCollectionResource(NotificationAction.class));
        return notificationResource;
    };
}
@Bean
公共资源处理器通知资源处理器(RepositoryEntityLinks entityLinks){
返回通知资源->{
添加(entityLinks.linkToCollectionResource(NotificationAction.class));
返回通知资源;
};
}

我想我有一些配置错误,因为这似乎是SpringDataREST的一个非常基本的用法。我缺少什么?

在ResourceProcessor中调试后,Invoker发现ResourceProcessor的解析类型不是预期的
ResourceProcessor
(在您的案例中是
ResourceProcessor
),而是
ResourceProcessor>
。原因是使用lambda创建处理器。 以旧方式创建匿名类解决了我的问题:

@Bean
public ResourceProcessor<Resource<Notification>> notificationResourceProcessor(RepositoryEntityLinks entityLinks) {
    return new ResourceProcessor<Resource<Notification>>() {
        @Override
        public Resource<Notification> process(Resource<Notification> notificationResource) {
           notificationResource.add(entityLinks.linkToCollectionResource(NotificationAction.class));
           return notificationResource;
        }
    };
}
@Bean
公共资源处理器通知资源处理器(RepositoryEntityLinks entityLinks){
返回新的ResourceProcessor(){
@凌驾
公共资源流程(资源通知资源){
添加(entityLinks.linkToCollectionResource(NotificationAction.class));
返回通知资源;
}
};
}
@Bean
public ResourceProcessor<Resource<Notification>> notificationResourceProcessor(RepositoryEntityLinks entityLinks) {
    return new ResourceProcessor<Resource<Notification>>() {
        @Override
        public Resource<Notification> process(Resource<Notification> notificationResource) {
           notificationResource.add(entityLinks.linkToCollectionResource(NotificationAction.class));
           return notificationResource;
        }
    };
}