java中怎么判断返回200_关于java:web.xml中定义的

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

但是,在某些情况下(尤其是在HTTP Basic Auth失败时),由于未在调用应用程序之前发生错误,因此未调用它,因此客户端获得服务器的默认错误页面(JBWEB bla bla,带有难看的紫色紫色的HTML) )。

现在,为了捕获这些"外部"错误,我在web.xml中添加了定义,如下所示:

/error.json

401

/error401.json

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

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

消费错误并使用该类的builder方法返回Response。 或使用ExceptionMapper类。

消耗错误是什么意思? 您的意思是写一些servlet / JAX-RS端点而不是静态json文件? 这就是我最终要做的,但是感觉有点不对:没有任何设置,Jboss返回的HTML具有正确的HTTP状态。 当我在web.xml中指定页面时,Jboss返回该页面(很好),但是将状态代码更改为200(为什么?)

不,我的意思是这样或那样的帮助吗?

可悲的是没有。 我在JAX-RS应用程序中已经有一个ExceptionMapper,它将处理我的代码可能引发的任何异常。 不幸的是,HTTP Basic身份验证(使用web.xml和安全领域)发生在JAX-RS之外,因此从未调用过Mapper。

我最终写的是编写一个小型Web服务(而不是静态页面),该服务将为我提供JSON响应和正确的HTTP状态代码以及相关的标头:

401

/error/401

哪个叫服务

@Path("/error")

public class ErrorService {

private static final Map statusMsg;

static

{

statusMsg = new HashMap();

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 ExceptionMapper将各种应用程序错误格式化为JSON。

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

错误页面机制的目的是向最终用户展示人类可读的内容。 如果返回的代码不是200,它将由浏览器以常见方式处理(浏览器的标准错误消息)。

那不可能是真的。 Jboss(即EAP)默认错误页面会返回正确的状态代码。 如果未指定,则登录失败将使我看到紫色的JBWEB000065页面,其HTTP状态为401。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值