gpt4 book ai didi

java - 在 web.xml 中定义的 总是返回 HTTP 状态 200

转载 作者:行者123 更新时间:2023-12-03 23:14:03 25 4
gpt4 key购买 nike

我有一个 EE6 JAX-RS 应用程序,它在 Jboss 7 (EAP 6.4) 上运行,并通过 ExceptionMapper 的实现在内部处理其大部分异常和错误。 .

但是,在某些情况下(最明显的是当 HTTP 基本身份验证失败时)因为在调用应用程序之前发生错误而不会调用它,因此客户端获得服务器的默认错误页面(JBWEB bla bla,带有丑陋紫色的 HTML )。

现在为了捕捉这些“外部”错误,我添加了 <error-page> web.xml 的定义像这样:

<error-page>
<location>/error.json</location>
</error-page>
<error-page>
<error-code>401</error-code>
<location>/error401.json</location>
</error-page>

该位置工作正常,我几乎得到了我想要的回复 但 HTTP 状态代码始终为 200。

至少可以说,这很烦人。如何让错误页面返回正确的错误代码?

最佳答案

我最终编写了一个小型 Web 服务(而不是静态页面),它会给我一个 JSON 响应和正确的 HTTP 状态代码,以及相关的 header :

<error-page>
<error-code>401</error-code>
<location>/error/401</location>
</error-page>

哪个调用服务
@Path("/error")
public class ErrorService {

private static final Map<Integer, String> statusMsg;
static
{
statusMsg = new HashMap<Integer, String>();
statusMsg.put(401, "Resource requires authentication");
statusMsg.put(403, "Access denied");
statusMsg.put(404, "Resource not found");
statusMsg.put(500, "Internal server error");
}

@GET
@Path("{httpStatus}")
public Response error(@PathParam("httpStatus") Integer httpStatus) {

String msg = statusMsg.get(httpStatus);
if (msg == null)
msg = "Unexpected error";

throw new MyWebApplicationException.Builder()
.status(httpStatus)
.addError(msg)
.build();
}

}

我有一个异常类 MyWebApplicationException使用它自己的构建器模式,我之前已经使用该模式使用 jax-rs 将各种应用程序错误格式化为 JSON ExceptionMapper .

所以现在我也只是通过相同的 channel 手动输入外部捕获的错误(例如发生在 JAX-RS 之外的 401)。

关于java - 在 web.xml 中定义的 <error-page> 总是返回 HTTP 状态 200,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37391210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com