我已经解决了一些困难:)
方法是添加一个控制器来处理所有资产。代码为:
import com.twitter.finagle.http.Request
import com.twitter.finatra.http.Controller
class Resources extends Controller {
get("/assets/:*") { request: Request =>
response.ok.file("/public/" + request.params("*"))
}
}
参考: http: //twitter.github.io/finatra/user-guide/files/#file-server
此外,我尝试使用以下代码更改资产路径,使其更漂亮,但失败了。所以我必须以“/public/”为前缀设置文件路径。如果有更好的选择,请指出,谢谢。
System.setProperty("com.twitter.finatra.config.assetPath", "src/main/resources/public")
System.setProperty("local.doc.root", "src/main/resources/public")
更新
System.setProperty 不起作用。@Christopher 谢谢提醒我。
设置 Flag("doc.root",...) 或 Flag("local.doc.root",...) 的方法如下:
1. 定义一个模块
object AssetsPathConfigModule extends TwitterModule {
val keyFileDoc = flag("local.doc.root", "./finatra/src/main/scala/com/myfinatra/public", "The key to use.") // file path
val keyDoc = flag("doc.root", "/com/myfinatra/public/", "class path") // class path
//@Singleton
@Provides
def providesThirdPartyFoo: FileResolver = {
new FileResolver("", keyDoc())
// or new FileResolver(keyFileDoc(),"")
}
}
2.将模块添加到HttpServer的modules seq中
class HelloWorldServer extends HttpServer {
override val modules = Seq(
...,
AssetsPathConfigModule
)
...
}
资源可以写成
类资源扩展控制器 { get("/assets/: ") { request: Request => response.ok.file(request.params(" ")) } }