当前位置: 首页 > 面试题库 >

使用ExceptionMapper的自定义HTTP原因短语

路金鑫
2023-03-14
问题内容

我定义了以下异常映射器来处理自定义 HttpCustomException

package com.myapp.apis;

import com.myapp.apis.model.HttpCustomException;
import com.myapp.apis.model.HttpCustomExceptionStatusType;
import com.myapp.apis.model.HttpCustomNotAuthorizedException;

import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

@Provider
public class HttpCustomExceptionMapper implements ExceptionMapper <HttpCustomException> {

  @Override
  public Response toResponse (HttpCustomException e) {
    Response response = Response.status (new HttpCustomExceptionStatusType (Response.Status.UNAUTHORIZED, e.getMessage ())).build ();
    if (e instanceof HttpCustomNotAuthorizedException) {
      response = Response.status (new HttpCustomExceptionStatusType (Response.Status.INTERNAL_SERVER_ERROR, e.getMessage ())).build ();
    }

    System.out.println ("HttpCustomExceptionMapper: " + response.getStatus () + ", " + response.getStatusInfo ().getReasonPhrase ());
    return response;
  }
}

HttpCustomNotAuthorizedException在代码中引发a时,我可以toResponse在catalina.out
中看到方法结尾定义的日志消息。因此,在html" target="_blank">请求处理期间将调用HttpCustomExceptionMapper类。但是,在最终响应中,我在客户端看到的是我只看到标准Not Authorized消息,而不是我在响应中设置的自定义消息。

为什么会这样?


问题答案:

您应该注意,当前版本的HTTP协议(HTTP / 2)完全不支持原因短语。它已从协议中删除。

因此,从Tomcat
9.0开始已删除了对发送原因短语的支持。在Tomcat中7.0,用于发送一个定制的原因短语8.5支持默认是关闭的(可与启用的系统属性,org.apache.coyote.USE_CUSTOM_STATUS_MSG_IN_HEADER)。在8.5,你还应该设置sendReasonPhrase="true"一个连接器。



 类似资料:
  • 本文向大家介绍定义hashcode时使用31系数的原因,包括了定义hashcode时使用31系数的原因的使用技巧和注意事项,需要的朋友参考一下 散列计算就是计算元素应该放在数组的哪个元素里。准确的说是放到哪个链表里面。按照Java的规则,如果你要想将一个对象放入HashMap中,你的对象的类必须提供hashcode方法,返回一个整数值。比如String类就有如下方法: 注意上面的for循环,有点搞

  • 支持和小程序的原生自定义组件混用,使用方式和原生的使用方式没有区别。在引用时在页面 js 入口配置 config.usingComponents。 export default { config: { usingComponents: { comp: 'path/to/components/comp/index' } } } 另外还需要在 webpack 中配

  • 问题内容: 我有一个看起来像这样的表格: 它的设置使得输入数据后所有必填字段和“保存”按钮都可以使用。但是,部分验证是,我将使用输入的数据使用$ http通过POST通过服务器访问服务器。 我应该在函数中放置该逻辑还是有一个更好的放置位置? 更新: * 我实现了以下内容,将其作为元素上的属性应用,但它在每次我不喜欢的按键上调用服务器/数据库: 问题答案: 您不需要在指令中发出$ http请求,更好

  • 主要内容:Maven依赖关系,自定义HTTP头示例HTTP消息可以包含许多描述消息属性的标头,例如内容长度,内容类型,授权等。 HttpClient提供了检索,添加,删除和枚举标头的方法。 在下面的教程中,我们将演示如何将自定义HTTP头添加到HttpClient和Http请求方法。 Maven依赖关系 我们使用maven来管理依赖关系,并使用Apache HttpClient 4.5版本。 将以下依赖项添加到您的项目中。 pom.xml 文件的

  • 问题内容: 抱歉,这个问题听起来太明显了。 我最近开始探索和学习AngularJS。我已经看了一些不错的教程- 官方文件 w3cSchool 一些不错的网站 ..还有其他一些我见过的。 我并不是说我已经阅读/研究了所有文档。 问题从这里开始- 现在,提一个问题,我发现Controller的定义在一个地方是不同的,而在其他地方则是不同的- 一个定义使用一种数组表示法(不确定官方术语)进行注入: 就是

  • 问题内容: 我正在关注egghead.io上的视频教程,但是在尝试遵循他在创建工厂时的示例时,我一直收到“未定义角度”的参考错误,但是我包含了角度脚本 这是我的html页面: 这是我的JavaScript文件“ main.js”: 我已经读过几篇类似的文章,如果我写错了,请纠正我,但是我认为这与引导绑定有关,并且我尝试使用手动引导,但没有成功,仍然遇到相同的错误。 但是我想知道的是,为什么这可以在

  • 更新(阅读后传递额外的属性到maven原型:生成): 我创造了自己的原型。src/main/资源/原型资源/pom.xml: 想要使用我自己的第三方deps工件和第三方deps版本参数。所以我添加了src/main/resources/META-INF/maven/archetype元数据。xml文件: 将archetype安装到我的本地存储库中。然后根据我的自定义原型创建工件: mvn原型:生成

  • easySwoole支持路由拦截。其路由利用fastRoute实现,因此其路由规则与其保持一致,该组件的详细文档请参考 GitHub文档 使用指导 若需要在asySwoole使用自定义路由拦截功能,请在应用目录的Http控制器目录下(默认为HttpController)下,建立Router类, 井继承\EasySwoole\Core\Http\AbstractInterface\Router实现r