我在 Boot 应用程序中使用 Spring Hateoas 以避免在 View 中手动创建链接。它在 Thymeleaf View 中工作得很好,当 Controller 调用服务发送同样由 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
运行工作?
最佳答案
ControllerLinkBuilder
当前只能从请求中使用,因为只有允许它使用来自它的服务器和端口信息创建完全限定的链接。
内@Scheduled
-invoked 方法,该信息不可用。如果您提供有关您在该方法中实际创建的内容的更多信息,我可以建议解决方法。
关于spring - 如何将 Spring Hatoas ControllerLinkBuilder 用于 Thymeleaf 模板化的预定电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32171839/