Quarkus - 如何为单页应用程序实现路由?

Quarkus - How to implement routing for Single Page Apps?

如果与 React、VueJS、Angular 等前端框架一起使用,如何在 Quarkus 中实现路由?

例如,对于任何 url“/xyz”,路由评估的顺序应为:

  1. 名为“xyz”的静态文件(如果存在)。
  2. 如果存在,用@Path("/xyz") 注释的控制器。
  3. 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 将按顺序使用:

  1. 文件 xyz,如果存在于 src/main/resources/META-INF/resources/
  2. 资源@Path("/xyz")
  3. 自定义NotFoundExceptionMapper