2015-08-23 27 views
3

我在啓動應用程序中使用Spring Hateoas以避免手動創建視圖中的鏈接。它在Thymeleaf視圖中很好用,當控制器調用服務發送Thymeleaf也呈現的電子郵件時,它可以工作。如何使用Spring Hatoas ControllerLinkBuilder進行Thymeleaf模板化計劃電子郵件

創建鏈接的代碼是非常標準的

this.readLink = linkTo(methodOn(PostController.class) 
    .readPost(eventId, postId)) 
    .withRel("ReadPost"); 

但對於一個@Scheduled服務生成的電子郵件,它不能像這樣

015-08-23 22:28:40.886 ERROR 1180 --- [pool-2-thread-1] o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task. 
java.lang.IllegalStateException: Could not find current request via RequestContextHolder. Is this being called from a Spring MVC handler? 
at org.springframework.util.Assert.state(Assert.java:392) ~[spring-core-4.2.0.RELEASE.jar:4.2.0.RELEASE] 
at org.springframework.hateoas.mvc.ControllerLinkBuilder.getCurrentRequest(ControllerLinkBuilder.java:242) ~[spring-hateoas-0.18.0.RELEASE.jar:na] 
at org.springframework.hateoas.mvc.ControllerLinkBuilder.getBuilder(ControllerLinkBuilder.java:189) ~[spring-hateoas-0.18.0.RELEASE.jar:na] 
at org.springframework.hateoas.mvc.ControllerLinkBuilderFactory.linkTo(ControllerLinkBuilderFactory.java:121) ~[spring-hateoas-0.18.0.RELEASE.jar:na] 

有什麼我可以做的就是身邊缺少的由於代碼作爲@Scheduled作業運行,因此有HttpServletRequest

+0

這是我試圖在本週提出的Spring Data團隊中遇到的一個主要突出問題。現在沒有實際的解決方法。 – chrylis

+0

好的,謝謝,不僅僅是我,那是 – Romell

+0

你有沒有從Spring Data Team得到任何東西? – Romell

回答

2

ControllerLinkBuilder當前只能從請求中使用,因爲只有它可以使用服務器和端口信息創建完全限定的鏈接。

@Scheduled之內 - 介紹了一種信息不可用的方法。如果您提供了更多關於您使用該方法實際創建的信息,我可以提出解決方法。

+1

我正在嘗試使用Thymeleaf生成一封HTML郵件,其中包含指向新帖子的鏈接列表。我想要做的是使用Hateoas生成鏈接,將它們添加到上下文並將其傳遞給TemplatingEngine。我不得不現在改變代碼來解決這個問題,但它不像Hateoas解決方案那樣漂亮,因爲終端現在在html模板中被硬編碼。 Hateoas的方式只在控制器中硬編碼,我非常喜歡它。 – Romell