Spring Data Rest引导问题

时间:2013-10-27 18:14:08

标签: spring spring-mvc spring-data-rest

我正在用spring-data-rest写一个休息服务。我面临一个例外,我不知道如何解决。

我有以下应用程序配置

@Configuration
@ComponentScan(basePackageClasses = Application.class)
@EnableJpaRepositories
@EnableTransactionManagement
public class Application {

    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder().setType(H2).build();
    }

    @Bean
    public CustomerLoader loadCustomers() { 
        return new CustomerLoader();
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
        LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
        lef.setDataSource(dataSource);
        lef.setJpaVendorAdapter(jpaVendorAdapter);
        lef.setPackagesToScan("hello");
        return lef;
    }

    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
        hibernateJpaVendorAdapter.setShowSql(false);
        hibernateJpaVendorAdapter.setGenerateDdl(true);
        hibernateJpaVendorAdapter.setDatabase(Database.H2);
        return hibernateJpaVendorAdapter;
    }

    @Bean
    public PlatformTransactionManager transactionManager() {
        return new JpaTransactionManager();
    }

这是我的WebApplication初始化程序

@Override
    public void onStartup(ServletContext ctx)
            throws ServletException {

        AnnotationConfigWebApplicationContext rootCtx = new AnnotationConfigWebApplicationContext();
        rootCtx.register(Application.class);

        ctx.addListener(new ContextLoaderListener(rootCtx));

        RepositoryRestExporterServlet exporter = new RepositoryRestExporterServlet();

        ServletRegistration.Dynamic reg = ctx.addServlet("exporter", exporter);
        reg.setLoadOnStartup(1);
        reg.addMapping("/*");
    }

当我在服务器上运行我的应用程序时,我在Servlet.init()

上得到以下异常

SEVERE: Servlet /spring-data-rest threw load() exception java.lang.NoSuchMethodError: org.springframework.data.rest.webmvc.ResourceProcessorInvokingHandlerAdapter.getReturnValueHandlers()Lorg/springframework/web/method/support/HandlerMethodReturnValueHandlerComposite;(如果你想要完整的堆栈跟踪请告诉)

我认为由于某些jar重复会导致一些类加载问题。但我正在用maven构建我的项目,而我只使用一个存储库(http://repo.spring.io/libs-milestone)和父pom spring-boot-starter-parent版本0.5.0.M5

3 个答案:

答案 0 :(得分:0)

它可能只是引起我注意你用于实体包的名称。我正在谈论String"你好"哪种方法" lef.setPackagesToScan"正在接收。这是您的实体所在的真实包裹吗?如果不是,那可能是你错误的原因。

答案 1 :(得分:0)

我所做的是从我的pom.xml中删除maven boot-starter-parent并手动添加所有依赖项。我得到了一个完全相同大小的战争,但它确实有效。魔法...

答案 2 :(得分:0)

对我来说,更新到最新的快照版本解决了这个问题。

<dependencies>
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-rest-webmvc</artifactId>
        <version>2.0.0.BUILD-SNAPSHOT</version>
    </dependency>
</dependencies>
<repositories>
    <repository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>http://repo.spring.io/snapshot</url>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>