我正在尝试创建一个错误资源,它将显示所有300-599错误代码的完全相同的视图。除了错误的POST请求之外,我已经完成了它。我得到的错误是,
WARN [2017-09-06 23:56:51,475] org.eclipse.jetty.server.handler.ErrorHandler: Error page loop /error
似乎我的ErrorResource逻辑中的某些内容已关闭,但我似乎无法将其放在上面。
这是ErrorResource类......
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo;
import com.project.views.ErrorView;
import java.net.URI;
@Path("/error/")
@Produces(MediaType.TEXT_HTML)
public class ErrorResource {
private String appName;
@Context
UriInfo uri;
public ErrorResource(String appName) {
this.appName = appName;
}
@POST
public Response errorPost() {
URI redirectUri = uri.getBaseUri();
return Response.seeOther(redirectUri).build();
}
@GET
public ErrorView error() {
return new ErrorView(appName);
}
@GET
@Path("/404/")
public Response error404() {
return Response.status(404).entity(new ErrorView(appName)).build();
}
}
errorPost()函数给我带来了麻烦。想法是在301重定向回到同一页面,表面上执行一个GET请求,它被常规的error()函数捕获。我的应用程序类显示我正在注册错误处理程序以捕获所有300-599的...
public class WebAppApplication extends Application<WebAppConfiguration> {
public static void main(String[] args) throws Exception {
new WebAppApplication().run(args);
}
@Override
public void initialize(Bootstrap<WebAppConfiguration> bootstrap) {
bootstrap.addBundle(new AssetsBundle("/www", "/static"));
bootstrap.addBundle(new ViewBundle());
}
@Override
public void run(WebAppConfiguration config, Environment environment) {
/* Error Handling */
ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler();
errorHandler.addErrorPage(300,403,"/error");
errorHandler.addErrorPage(404, "/error/404");
errorHandler.addErrorPage(405,599,"/error");
/* Resources */
final HomeResource homeResource = new HomeResource(config.getAppName());
final ErrorResource errorResource = new ErrorResource(config.getAppName());
/* Environment Registration */
environment.getApplicationContext().setErrorHandler(errorHandler);
environment.jersey().register(homeResource);
}
}
在错误视图中没什么太疯狂的
public class ErrorView extends View {
private String appName;
public ErrorView(String appName) {
super("pageError.mustache");
this.appName = appName;
}
public String getAppName() {
return XSS.htmlEncode(appName);
}
}
ErrorView小胡子模板实际上只包含消息,导航栏和元刷新HTML标记。
<meta http-equiv="refresh" content="10; url=/" />
但是向“/ input /”(或任何)端点发出错误的POST请求会引发“页面循环”错误,并在浏览器中返回...
浏览器屏幕截图:
使其成为一个包罗万象的错误消息将有助于保持代码库清洁,对用户有帮助,并且即使在意外故障中也能维护网站品牌。
我感谢社区可能拥有的任何洞察力,以及先发制人的“谢谢”建议!