我在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
的问题?
答案 0 :(得分:2)
ControllerLinkBuilder
目前只能在请求中使用,因为只允许它使用服务器和端口信息创建一个完全限定的链接。
在@Scheduled
调用的方法中,该信息不可用。如果您提供有关您在该方法中实际创建的内容的更多信息,我可以建议解决方法。