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