【问题标题】:Change main endpoint in Spring Data Rest (usind Spring Boot)更改 Spring Data Rest 中的主端点(使用 Spring Boot)
【发布时间】:2014-06-21 03:25:54
【问题描述】:

我正在使用 Spring(启动、数据、数据休息)构建一个小型应用程序。 我有一些自动导出为 Rest 端点的 JpaRepositories。 我想要做的是将基本路径从/更改为/api。 现在列出所有人,例如,我对http://localhost:8080/people 进行 GET,我希望 url 为 http://localhost:8080/api/people。

我尝试添加这个配置类,但什么也没发生(似乎 Spring Boot 覆盖了这个配置):

public class SpringWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{
@Override
protected Class<?>[] getRootConfigClasses()
{
    return new Class<?>[] { Application.class};
}
@Override
protected Class<?>[] getServletConfigClasses()
{
    return new Class<?>[] { RestExporterRestConfig.class, RepositoryRestMvcConfiguration.class };
}
@Override
protected String[] getServletMappings()
{       
    return new String[] { "/api/*" };
}   
}

我的Application.java:

@Configuration
@ComponentScan
@Import(RestExporterRestConfig.class)
@EnableJpaRepositories
@EnableAutoConfiguration
public class Application extends SpringBootServletInitializer {

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}

}

和RestExporterRestConfig:

@Configuration
public class RestExporterRestConfig extends RepositoryRestMvcConfiguration {

@Bean
public Validator validator() {
    return new LocalValidatorFactoryBean();
}

@Override
protected void configureValidatingRepositoryEventListener(ValidatingRepositoryEventListener v) {
    v.addValidator("beforeCreate", validator());
}

@Bean
@Qualifier
public DefaultFormattingConversionService defaultConversionService() {
    DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
    conversionService.addConverter(StringToDate.INSTANCE);
    return conversionService;
}

@Bean
public DomainClassConverter<?> domainClassConverter() {
    return new DomainClassConverter<DefaultFormattingConversionService>(defaultConversionService());
}

}

【问题讨论】:

    标签: spring spring-boot spring-data-rest


    【解决方案1】:

    嗯,我想通了。在这种情况下,不需要 SpringWebAppInitializer。我刚刚将此代码添加到 Application.java:

    @Bean
    public ServletRegistrationBean dispatcherRegistration(DispatcherServlet dispatcherServlet)     {
        ServletRegistrationBean reg = new ServletRegistrationBean(dispatcherServlet);
        reg.addUrlMappings("/api/*");
    
        return reg;
    }
    

    我认为这是使用 Spring Boot 修改(添加、更改映射等)servlet 的正确方法。

    【讨论】:

    • 可以,但要更改现有的DispatcherServlet 路径,您只需设置“server.servletPath=api/”。
    • 谢谢。显然是更清洁的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 2018-03-17
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    相关资源
    最近更新 更多