mar*_*ark 15 java rest jax-rs restlet
我有一个使用JAX-RS Restlet扩展实现的自托管JAX-RS REST服务.
现在我必须提供静态内容,我想知道如何使用JAX-RS.注意,我不知道编译时的物理目录结构.所以,给出一个像这样的URL
http://bla-bla:8182/static/yaba/daba/doo.png
Run Code Online (Sandbox Code Playgroud)
$(ROOT)/yaba/daba/doo.png必须返回该文件,$(ROOT)静态内容根目录在哪里.
是否可以使用纯JAX-RS进行操作?
谢谢.
编辑
在编译时已知:
编译时未知:
mar*_*ark 20
刚发现它.
根据javax.ws.rs.Path注释javadocs,可以指定正则表达式来指示什么被认为是模板参数匹配.
因此,以下代码有效:
@Path("static")
public class StaticContentHandler {
...
@GET
@Path("{path:.*}")
public FileRepresentation Get(@PathParam("path") String path) {
...;
}
}
Run Code Online (Sandbox Code Playgroud)
GET http://localhost:8182/static/yaba/daba/doo.png到达Get与方法path等于"雅巴/达巴/ doo.png" -正是我一直在寻找.
希望它能帮助任何人.
顺便说一句,FileRepresentation属于Restlet,所以真正纯粹的JAX-RS实现会返回其他东西.
假设静态文件夹位于此处:./src/main/resources/WEB-INF/static在您的项目中:
@Path("")
public class StaticResourcesResource {
@Inject ServletContext context;
@GET
@Path("{path: ^static\\/.*}")
public Response staticResources(@PathParam("path") final String path) {
InputStream resource = context.getResourceAsStream(String.format("/WEB-INF/%s", path));
return Objects.isNull(resource)
? Response.status(NOT_FOUND).build()
: Response.ok().entity(resource).build();
}
}
Run Code Online (Sandbox Code Playgroud)
以下是操作示例和存储库的完整说明:https : //daggerok.github.io/thymeleaf-ee/#configure-jax-rs-serve-static-files-and-webjars
| 归档时间: |
|
| 查看次数: |
7361 次 |
| 最近记录: |