如何自定义处理在Quarkus中找不到的资源/ URL?

时间:2019-08-28 10:29:39

标签: quarkus

我是Quarkus的新手,我想知道如何覆盖提供错误日志的默认404页面,或者如何将所有无法识别的URL整齐地重定向到META-INF / recourses目录中的自定义HTML

2 个答案:

答案 0 :(得分:0)

使用quarkus 0.20+,您可以创建如下的ExceptionMapper:

import java.util.Scanner;

import javax.ws.rs.NotFoundException;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

/**
 * NotFoundExepptionMapper
 */
@Provider
public class NotFoundExeptionMapper implements ExceptionMapper<NotFoundException> {
    @Override
    public Response toResponse(NotFoundException exception) {
        String text = new Scanner(this.getClass().getResourceAsStream("/META-INF/resources/notfound.html"), "UTF-8").useDelimiter("\\A").next();
        return Response.status(404).entity(text).build();
    }
}

将页面保存在/META-INF/resources/notfound.html上。

答案 1 :(得分:0)

您还可以做的是从WebApplicationException扩展自己的异常,而不是编写映射器。

参见下文:

public class NotFoundException extends WebApplicationException {
    public NotFoundException(String msg) {
        super(msg, Response.Status.NOT_FOUND);
    }
}

显然在您的REST控制器中抛出此异常:

@GET
@Path("/{id}")
public MyEntity find(@PathParam("id") Long id) {
   return (MyEntity) Optional.ofNullable(MyEntity.findById(id)).orElseThrow(() -> new NotFoundException("MyEntity with given id=" + id + " not found"));
}