Quarkus - 如何为单页应用程序实现路由?
Quarkus - How to implement routing for Single Page Apps?
如果与 React、VueJS、Angular 等前端框架一起使用,如何在 Quarkus 中实现路由?
例如,对于任何 url“/xyz”,路由评估的顺序应为:
- 名为“xyz”的静态文件(如果存在)。
- 如果存在,用@Path("/xyz") 注释的控制器。
- 404 -> 服务“/index.html”
Quarkus 已经为您完成了 1 和 2。
对于3,你只需要实现一个自定义的NotFoundExceptionMapper
@Provider
public class NotFoundExceptionMapper implements ExceptionMapper<NotFoundException> {
@Override
@Produces(MediaType.TEXT_HTML)
public Response toResponse(NotFoundException exception) {
InputStream resource = ClassLoader.getSystemResourceAsStream("META-INF/resources/index.html");
return null == resource
? Response.status(NOT_FOUND).build()
: Response.ok().entity(resource).build();
}
}
Quarkus 将按顺序使用:
- 文件
xyz
,如果存在于 src/main/resources/META-INF/resources/
- 资源@Path("/xyz")
- 自定义
NotFoundExceptionMapper
如果与 React、VueJS、Angular 等前端框架一起使用,如何在 Quarkus 中实现路由?
例如,对于任何 url“/xyz”,路由评估的顺序应为:
- 名为“xyz”的静态文件(如果存在)。
- 如果存在,用@Path("/xyz") 注释的控制器。
- 404 -> 服务“/index.html”
Quarkus 已经为您完成了 1 和 2。
对于3,你只需要实现一个自定义的NotFoundExceptionMapper
@Provider
public class NotFoundExceptionMapper implements ExceptionMapper<NotFoundException> {
@Override
@Produces(MediaType.TEXT_HTML)
public Response toResponse(NotFoundException exception) {
InputStream resource = ClassLoader.getSystemResourceAsStream("META-INF/resources/index.html");
return null == resource
? Response.status(NOT_FOUND).build()
: Response.ok().entity(resource).build();
}
}
Quarkus 将按顺序使用:
- 文件
xyz
,如果存在于src/main/resources/META-INF/resources/
- 资源@Path("/xyz")
- 自定义
NotFoundExceptionMapper