Spring中configureRepositoryRestConfiguration无法重写及替代方法咨询
Spring Data REST: 解决
configureRepositoryRestConfiguration方法不存在的问题 嘿,我刚好踩过这个坑!你说的完全没错,新版本的Spring Data REST已经移除了RepositoryRestMvcConfiguration里的configureRepositoryRestConfiguration方法,官方现在推荐用更灵活的接口式配置来替代继承配置类的老方式。
问题根源
在Spring Data REST 2.6.x及以上版本(对应Spring Boot 2.4+),RepositoryRestMvcConfiguration的结构做了调整:原来的configureRepositoryRestConfiguration方法被迁移到了RepositoryRestConfigurer接口中,同时方法签名新增了CorsRegistry参数,用于统一配置跨域规则。
解决方案:改用RepositoryRestConfigurer接口
你只需要把配置类从继承RepositoryRestMvcConfiguration改成实现RepositoryRestConfigurer接口,同时因为要处理静态资源,还需要显式实现WebMvcConfigurer接口(原来的父类本身实现了这个接口)。下面是修改后的完整代码:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.rest.core.config.RepositoryRestConfiguration; import org.springframework.data.rest.webmvc.config.RepositoryRestConfigurer; import org.springframework.security.data.repository.query.SecurityEvaluationContextExtension; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class MSARepositoryRestMvcConfiguration implements RepositoryRestConfigurer, WebMvcConfigurer { private static final Logger LOG = LoggerFactory.getLogger(MSARepositoryRestMvcConfiguration.class); @Value("${static.path}") private String staticPath; @Override public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, org.springframework.web.cors.CorsRegistry cors) { config.setBasePath("/api"); // config.exposeIdsFor(User.class,Order.class,HeroRating.class,RiderLocation.class,OrderItem.class,Address.class,ShopDetail.class,PromoCode.class,RiderDuty.class,Criteria.class,Setting.class); config.setReturnBodyForPutAndPost(true); config.setReturnBodyOnCreate(true); config.setReturnBodyOnUpdate(true); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { if(staticPath != null) { LOG.info("Serving static content from " + staticPath); registry.addResourceHandler("/photos/**").addResourceLocations("file:" + staticPath+"photos/"); registry.addResourceHandler("/").addResourceLocations("classpath:/static/"); } } @Bean public SecurityEvaluationContextExtension securityEvaluationContextExtension() { return new SecurityEvaluationContextExtension(); } }
关键修改点
- 替换继承关系为实现
RepositoryRestConfigurer和WebMvcConfigurer接口,这是官方推荐的配置方式,更符合Spring的模块化设计理念 configureRepositoryRestConfiguration方法新增了CorsRegistry参数,你可以在这里配置跨域规则,如果不需要的话直接忽略这个参数即可- 方法修饰符从
protected改为public,因为接口方法默认是public访问权限
这样修改后,你的配置就能正常生效,完美适配新版本的Spring Data REST。
内容的提问来源于stack exchange,提问作者SFAH
相关产品推荐
相关产品推荐

