I have solve it with some struggle :)
The way is add a controller to deal with all assets. The code as:
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("*"))
}
}
refer :http://twitter.github.io/finatra/user-guide/files/#file-server
Besides,I try to use below code to change assets path,to make it more pretty,but failed. So I must setting file path with a "/public/" as prefix. If it have a better choice, please point out,thanks.
System.setProperty("com.twitter.finatra.config.assetPath", "src/main/resources/public")
System.setProperty("local.doc.root", "src/main/resources/public")
UPDATE
System.setProperty doesn't work. @Christopher thanks remind me.
A way to setting a Flag("doc.root",...) or Flag("local.doc.root",...) is as follow:
1. define a Module
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.add the module to HttpServer's modules seq
class HelloWorldServer extends HttpServer {
override val modules = Seq(
...,
AssetsPathConfigModule
)
...
}
Resources could be write as
class Resources extends Controller {
get("/assets/:") { request: Request =>
response.ok.file(request.params(""))
}
}