任何人都可以指出我如何查看我的自定义404页面。我用Google搜索并尝试实施ExceptionMapper<RuntimeException>
,但这并没有完全发挥作用。我正在使用0.8.1版本
我的异常映射器:
public class RuntimeExceptionMapper implements ExceptionMapper<NotFoundException> {
@Override
public Response toResponse(NotFoundException exception) {
Response defaultResponse = Response.status(Status.OK)
.entity(JsonUtils.getErrorJson("default response"))
.build();
return defaultResponse;
}
}
这仅适用于不正确的API,而不适用于资源调用
我的设置:
@Override
public void initialize(Bootstrap<WebConfiguration> bootstrap) {
bootstrap.addBundle(new AssetsBundle("/webapp", "/", "index.html"));
}
@Override
public void run(WebConfiguration configuration, Environment environment) throws Exception {
environment.jersey().register(RuntimeExceptionMapper.class);
((AbstractServerFactory) configuration.getServerFactory()).setJerseyRootPath("/api/*");
// Registering Resources
environment.jersey().register(new AuditResource(auditDao));
....
}
现在,
http://localhost:8080/api/rubish
经过重写的ExceptionMapper方法
http://localhost:8080/rubish.html
会生成默认的404页
如何设置以便每当请求未知页面时,dropwizard将显示自定义404页面
我为例外映射器
提供了this链接答案 0 :(得分:2)
要为任何错误配置自定义错误页面,您可以在应用程序中配置ErrorPageErrorHandler,如下所示:
@Override
public void run(final MonolithConfiguration config,
final Environment env) {
ErrorPageErrorHandler eph = new ErrorPageErrorHandler();
eph.addErrorPage(404, "/error/404");
env.getApplicationContext().setErrorHandler(eph);
}
然后创建一个这样的资源:
@Path("/error")
public class ErrorResource {
@GET
@Path("404")
@Produces(MediaType.TEXT_HTML)
public Response error404() {
return Response.status(Response.Status.NOT_FOUND)
.entity("<html><body>Error 404 requesting resource.</body></html>")
.build();
}
万一你需要它,这里也是ErrorPageErrorHandler的导入:
import org.eclipse.jetty.servlet.ErrorPageErrorHandler;
答案 1 :(得分:1)
如果我理解正确,您想要的是为不匹配的资源请求提供自定义404页面。为此,您可以编写单独的资源类,并在其中编写单独的资源方法。此资源方法应具有
@Path(&#34; / {default:。*}&#34;)
注释。此资源方法捕获不匹配的资源请求。在此方法中,您可以提供自己的自定义视图。
为清晰起见,请查看以下代码段
@Path("/")
public class DefaultResource {
/**
* Default resource method which catches unmatched resource requests. A page not found view is
* returned.
*/
@Path("/{default: .*}")
@GET
public View defaultMethod() throws URISyntaxException {
// Return a page not found view.
ViewService viewService = new ViewService();
View pageNotFoundView = viewService.getPageNotFoundView();
return pageNotFoundView;
}
}
如果你不知道如何使用dropwizard提供静态资产或者问我,你可以参考this。