EnableSpringDataWebSupport 似乎不适用于 WebMvcConfigurerAdapter

Vla*_*lin 5 java spring spring-mvc spring-data spring-boot

@EnableSpringDataWebSupport在我的 Spring Boot 应用程序中成功使用来启用分页、排序和其他内容。但是,在某些时候,我不得不引入一个自定义参数解析器,并使用 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);
    } 
}
Run Code Online (Sandbox Code Playgroud)

它使我的新参数解析器工作,但完全破坏了由@EnableSpringDataWebSupport. 我试过切换WebMvcConfigurerAdapter到像DelegatingWebMvcConfigurationor 之类的替代品WebMvcConfigurationSupport,但没有运气——分页失败,但有例外:

无法实例化 [org.springframework.data.domain.Pageable]:指定的类是一个接口

我将不胜感激任何有关如何处理此问题的帮助或建议。类似的问题并没有多大帮助:

Vla*_*lin 3

因此,经过一番调查,我找到了解决方案(也许不是理想的解决方案,但仍然有效——我仍然很高兴看到 Spring 专业人员针对该问题提供“正确”的解决方案)。我改变的是从 切换extends WebMvcConfigurerAdapterextends 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题Pageable消失了,定制RenamingProcessor就像一个魅力。

希望这个答案能够帮助面临类似问题的人。