Spring Data Rest:未调用RepositoryEventHandler方法

时间:2014-08-26 16:15:43

标签: java spring spring-data spring-data-rest

我正在尝试将Spring Data REST documentation中描述的RepositoryEventHandler添加到下面显示的REST存储库中:

@RepositoryRestResource(collectionResourceRel = "agents", path = "/agents")
public interface AgentRepository extends CrudRepository<Agent, Long> {
    // no implementation required; Spring Data will create a concrete Repository
}

我创建了一个AgentEventHandler:

@Component
@RepositoryEventHandler(Agent.class)
public class AgentEventHandler {

    /**
     * Called before {@link Agent} is persisted 
     * 
     * @param agent
     */
    @HandleBeforeSave
    public void handleBeforeSave(Agent agent) {

        System.out.println("Saving Agent " + agent.toString());

    }
}

并在@Configuration组件中声明它:

@Configuration
public class RepositoryConfiguration {

    /**
     * Declare an instance of the {@link AgentEventHandler}
     *
     * @return
     */
    @Bean
    AgentEventHandler agentEvenHandler() {

        return new AgentEventHandler();
    }
}

当我发布到REST资源时,实体会被持久化,但方法handleBeforeSave永远不会被调用。我错过了什么?

我正在使用:Spring Boot 1.1.5.RELEASE

2 个答案:

答案 0 :(得分:22)

有时候明显的错误会被忽视。

POST - 一个Spring Data REST资源,发出BeforeCreateEvent。要捕获此事件,方法handleBeforeSave必须使用@HandleBeforeCreate而不是@HandleBeforeSave进行注释(后者在PUT和PATCH HTTP调用时调用)。

测试成功通过我(已清理)demo app现在。

答案 1 :(得分:1)

您的主要Application类如何?它是否导入了https://spring.io/guides/gs/accessing-data-rest/

中描述的RepositoryRestMvcConfiguration