You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:01:59