web-dev-qa-db-ja.com

Spring Data Rest:RepositoryEventHandlerメソッドが呼び出されない

Spring Data RESTドキュメント を以下に示す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リソースにPOSTしているとき、エンティティは永続化されますが、メソッドhandleBeforeSaveは呼び出されません。何が欠けていますか?

私が使用しているもの:Spring Boot 1.1.5.RELEASE

16
dimi

明らかな間違いが見過ごされることがあります。

[〜#〜] post [〜#〜]-Spring Data RESTリソース、-を放出します BeforeCreateEvent 。このイベントをキャッチするには、メソッドhandleBeforeSaveに@HandleBeforeSaveではなく@HandleBeforeCreateアノテーションを付ける必要があります(後者はPUTおよびPATCH HTTP呼び出しで呼び出されます)。

私の(クリーンアップされた) デモアプリ でテストに合格しました。

23
dimi

メインのApplicationクラスはどのように見えますか? https://spring.io/guides/gs/accessing-data-rest/ で説明されているように、RepositoryRestMvcConfigurationをインポートしますか?

1
Marcel Overdijk