EnableSpringDataWebSupport似乎与WebMvcConfigurerAdapter配合得很好

时间:2017-03-10 15:58:06

标签: java spring spring-mvc spring-boot spring-data

我在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转换为DelegatingWebMvcConfigurationWebMvcConfigurationSupport之类的替代品,但没有运气 - 分页失败,但有例外:

  

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

如果您有任何帮助或建议,我将不胜感激。类似的问题并没有多大帮助:

1 个答案:

答案 0 :(得分:2)

所以,经过一番调查,我找到了解决方案(也许,不理想的解决方案,但仍然有效 - 我仍然很高兴看到&#34;正确解决问题的解决方案春季专业人士)。我改变的是从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就像魅力一样。

希望这个答案可以帮助那些面临类似问题的人。