如何将Spring Hatoas ControllerLinkBuilder用于Thymeleaf模板化计划电子邮件

时间:2015-08-23 21:43:10

标签: spring spring-boot thymeleaf spring-hateoas

我在Boot应用程序中使用Spring Hateoas以避免在视图中手动创建链接。它在Thymeleaf视图中运行良好,当控制器调用服务发送也由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]

由于代码作为HttpServletRequest工作运行,我能做些什么来解决缺少@Scheduled的问题?

1 个答案:

答案 0 :(得分:2)

ControllerLinkBuilder目前只能在请求中使用,因为只允许它使用服务器和端口信息创建一个完全限定的链接。

@Scheduled调用的方法中,该信息不可用。如果您提供有关您在该方法中实际创建的内容的更多信息,我可以建议解决方法。