我在我的 Spring Boot 应用程序中成功地使用了 @EnableSpringDataWebSupport
来启用分页、排序等等。然而,在某些时候,我不得不引入一个自定义参数解析器,并使用 Java 配置来实现,如下所示:
@Configuration
@EnableSpringDataWebSupport
public class MvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(renamingProcessor());
}
@Bean
protected RenamingProcessor renamingProcessor() {
return new RenamingProcessor(true);
}
}
它使我的新参数解析器工作,但完全破坏了由 @EnableSpringDataWebSupport
自动配置的分页和其他功能。我已经尝试将 WebMvcConfigurerAdapter
切换为 DelegatingWebMvcConfiguration
或 WebMvcConfigurationSupport
等替代方案,但没有成功——分页失败,但出现以下异常:
Failed to instantiate [org.springframework.data.domain.Pageable]: Specified class is an interface
对于如何处理此问题的任何帮助或建议,我将不胜感激。类似的问题没有太大帮助:
最佳答案
因此,经过一些调查后,我找到了解决方案(也许不是理想的解决方案,但仍然有效——我仍然很高兴看到 Spring 专业人士对问题的“正确”解决方案)。我所做的更改是从 extends WebMvcConfigurerAdapter
切换到 extends HateoasAwareSpringDataWebConfiguration
(因为我们使用的是 HATEOAS)。我还更新了覆盖的 addArgumentResolvers
,现在我的 MvcConfig
看起来像这样:
@Configuration
public class MvcConfig extends HateoasAwareSpringDataWebConfiguration {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
super.addArgumentResolvers(argumentResolvers);
argumentResolvers.add(renamingProcessor());
}
@Bean
protected RenamingProcessor renamingProcessor() {
return new RenamingProcessor(true);
}
}
Pageable
的问题消失了,自定义 RenamingProcessor
的效果非常好。
希望这个答案能帮助遇到类似问题的人。
关于java - EnableSpringDataWebSupport 似乎不适用于 WebMvcConfigurerAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42722613/