gpt4 book ai didi

java - 防止 Tomcat 在 HTTP 错误状态 4xx 或 5xx 上干扰 Jersey/JAX-RS 2 响应主体

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:27:14 25 4
gpt4 key购买 nike

我有以下 REST API 堆栈

  • Jersey 2/JAX RS 2.0
  • Tomcat 7.0.47
  • jackson 2

我的目标是在发生错误时拥有自定义响应主体。我希望能够向客户发送解释到底出了什么问题,以便于调试。

首先我尝试使用 @Context HttpServletResponse 并在那里设置 http 状态代码,但它被 jersey 忽略了(这是正常行为,但这超出了我的理解范围)

然后我尝试像这样使用 WebApplicationException:

@GET
@Path("/myapi")
public BaseResponse getSomething() {
BaseResponse b = new BaseResponse();
if(error) {
b.setStatusDescription("reason for error");
throw new WebApplicationException(Response.status(Response.Status.CONFLICT).entity(b).build());
}
//add content to BaseReponse
return b
}

但是 Tomcat 返回给我这样的东西:

<html>
<head>
<title>Apache Tomcat/7.0.47 - Error report</title>
<style>
<!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22p

这是标准的 Tomcat html 输出,由我想返回的响应主体的长度限制(.entity(b) - b 的长度)。所以它被识别了,但是 Tomcat 只是用它自己的错误页面覆盖了它。

作为旁注,我还尝试只返回具有相同结果的响应:

return Response.status(Response.Status.CONFLICT).entity(b).build()

那么我该如何告诉 Tomcat 让我一个人呆着,让我自己的回应通过呢?

最佳答案

只需在ResourceConfig类的配置中添加如下代码即可。

property(ServerProperties.RESPONSE_SET_STATUS_OVER_SEND_ERROR, "true");

参见 jersey.config.server.response.setStatusOverSendError

关于java - 防止 Tomcat 在 HTTP 错误状态 4xx 或 5xx 上干扰 Jersey/JAX-RS 2 响应主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21134629/

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