具有MicroProfile配置的可配置JAX-RS ExceptionMapper

当您使用JAX-RS创建REST服务时,通常要么不返回任何内容(例如HTTP 201/2/4等),要么返回某些数据(可能采用JSON格式(因此HTTP 200),或者返回某些异常/错误(例如HTTP 4xx或5xx) )。

我们通常将运行时异常转换为某些HTTP 5xx,将已检查异常转换为某些4xx。

因为我们要保持边界整洁,所以当我们将Exception转换为HTTP响应时,我们不会在响应的主体中包含完整的Java stacktrace。 我们通常只添加带有HTTP 5xx(有时是4xx)响应的“ REASON”标头。 但是,这意味着我们的大多数ExceptionMappers看起来都差不多(类似这样):

@Providerpublic class SomeExceptionMapper implements ExceptionMapper<SomeException> {@Overridepublic Response toResponse(SomeException exception) {return Response.status(500).header("reason", exception.getMessage()).build();}}

使用MicroProfile Config API

我们可以使用MicroProfile Config API创建一个可配置的Exception Mapper,它允许使用者将Exception配置为HTTP响应代码映射。

我们的@Provider将处理所有运行时异常:

@Providerpublic class RuntimeExceptionMapper implements ExceptionMapper<RuntimeException> {// ...}

我们@ @Inject配置和提供程序:

@Injectprivate Config config;@Context private Providers providers;

当我们实现toResponse方法时,我们会在配置中查看此Exception类的映射:

@Override@Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})public Response toResponse(RuntimeException exception) {return handleThrowable(exception);}private Response handleThrowable(Throwable exception) {if(exception instanceof WebApplicationException) {return ((WebApplicationException) exception).getResponse();}if(exception!=null){String configkey = exception.getClass().getName() + STATUS_CODE_KEY;Optional<Integer> possibleDynamicMapperValue = config.getOptionalValue(configkey,Integer.class);if(possibleDynamicMapperValue.isPresent()){int status = possibleDynamicMapperValue.get();// You switched it offif(status<0)return handleNotMapped(exception);String reason = getReason(exception);log.log(Level.FINEST, reason, exception);return Response.status(status).header(REASON, reason).build();} else if(exception.getCause()!=null && exception.getCause()!=null && providers!=null){final Throwable cause = exception.getCause();return handleThrowable(cause);} else {return handleNotMapped(exception);}}return handleNullException();}

( 这里有完整的示例)

我们还将向上处理异常链,直到获得映射,或者默认为正常的500错误。

因此,我们可以为映射添加配置,如下所示:

## 503 Service Unavailable: The server is currently unavailable (because it is overloaded or down for maintenance). Generally, this is a temporary state.org.eclipse.microprofile.faulttolerance.exceptions.CircuitBreakerOpenException/mp-jaxrs-ext/statuscode=503## 401 Unauthorized (RFC 7235): Similar to 403 Forbidden, but specifically for use when authentication is required and has failed or has not yet been provided.javax.ws.rs.NotAuthorizedException/mp-jaxrs-ext/statuscode=401

在上面的示例中,我们将CircuitBreakerOpenException(来自MicroProfile容错API)映射到503,将NotAuthorizedException映射到401。

屏幕截图示例

异常映射器

用作库。

您还可以将所有这些捆绑在一个jar文件中,以供您的任何项目使用。 我在maven Central和github中提供了上述内容,因此您也可以直接使用它。

只需将其添加到您的pom.xml

<dependency><groupId>com.github.phillip-kruger.microprofile-extensions</groupId><artifactId>jaxrs-ext</artifactId><version>1.0.9</version></dependency>

它带有一些预定义的映射,但是您可以在配置中覆盖它。

翻译自: https://www.javacodegeeks.com/2018/08/jax-rs-exceptionmapper-config.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

video.js android,VideoJS + HTML5自动播放失败,适用于Android 2.3+和IOS 4+

我的VideoJS和HTML5项目针对更新的Web浏览器(较新版本的FireFox和Chrome)以及移动浏览器(Android2.3 和IOS4 )。VideoJS HTML5自动播放失败&#xff0c;适用于Android 2.3和IOS 4我希望所有视频在“准备就绪”之后自动播放。我尝试了几种方法(在下面的方法中提到过)&#xff0…

EPS(Evolved Packet System,演进的分组系统)

EPS&#xff08;Evolved Packet System&#xff0c;演进的分组系统&#xff09;是3GPP标准委员会在第4代移动通信中出现的概念。可以认为EPSUE&#xff08;User Equipment&#xff0c;用户设备&#xff09;LTE&#xff08;4G接入网部分&#xff09;EPC&#xff08;Evolved Pack…

lottie android min sdk,跳一个Lottie无法回调开始播放动画事件的坑

一、背景介绍项目背景是在界面中弹出一个浮层动画&#xff0c;同时播放一个音效。二、当前实现实现思路比较简单&#xff1a;继承一个DialogFragment&#xff0c;在相关的生命周期方法onViewCreated中调用startLottieAnim进行动画播放&#xff0c;同时监听lottie动画播放的回调…

Ad-hoc

Ad-hoc这个词来源于拉丁语&#xff0c;在百度上解释为“for this purpose only”&#xff0c;在wiki上解释为“for this”&#xff0c;其中文在wiki上被解释成包含特设的、特定目的的&#xff08;地&#xff09;、即席的、临时的、将就的、专案的”这么多种含义。在wireless ne…

掌握Java 11的Constantdynamic

为了使JVM对动态语言更具吸引力&#xff0c;该平台的第七版已将invokedynamic引入了其指令集。 Java开发人员通常不会注意到此功能&#xff0c;因为它隐藏在Java字节码中。 简而言之&#xff0c;通过使用invokedynamic &#xff0c;可以将方法调用的绑定延迟到第一次调用之前。…

android5.0 v4a,【图】多图讲解V4A提高G5音效详细步骤(G5音效可以更棒的)

首先感谢论坛前辈&#xff0c;看着你们介绍的方法&#xff0c;我把G5应有的音效搞出来了&#xff0c;效果提升非常明显。(看清了&#xff0c;如果不是非常明显&#xff0c;我也不会费这么大劲在这儿做讲解)。特记录和总结过程如下&#xff1a;1. 安装一键ROOT。2. 安装虚拟按…

feeder link

feeder link&#xff1a; 从一个设在指定的固定点上的地球站到一个空间站&#xff0c;或从一个空间站到一个设在某固定点的地球站的无线电链路&#xff0c;用于除卫星固定业务以外的空间无线电通信业务的

2021年春季学期期末统一考试 中国法制史 试题

2021年7月 一、单项选择题&#xff08;每小题2分&#xff0c;共20分&#xff09; 1.商朝法律制度的总称叫做( )。 A.禹刑 B.汤刑 C.汤诰 D.九刑 2.战国时期改“法”为“律”的人是( )。 A.韩非 B.赵鞅 C.商鞅 D.屈原 3.秦始皇和李斯等人取消了世卿世禄分封制&#xff0c;在全国…

怎么在html中加入pjax,pjax加载多说的三种方法

多说官方提供的方法&#xff1a;http://dev.duoshuo.com/docs/50b344447f32d30066000147这里不进行说明&#xff0c;请进入上述链接进行查看。效果说明&#xff1a;进入文章页需要点击按钮&#xff0c;多说评论才会加载出来。方法二民间高手不满足方法一那种需要按一次才能加载…

2021年春季学期期末统一考试 高级财务会计 试题

试卷代号&#xff1a; 1039 2021年7月 注意事项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏内。考试结束后&#xff0c;把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收完考卷和答题纸后才可离开考场。 二、仔细读懂题…

Multi-commodity Flow Problem

多物网络流问题&#xff08;Multi-commodity Flow Problem&#xff09;是多种物品&#xff08;或货物&#xff09;在网络中从不同的源点流向不同的汇点的网络流问题。 定义

2021年春季学期期末统.考试 公司概论 试题

试卷代号&#xff1a; 1040 2021年7月 注意事项 一、将你的学号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸的规定栏内。考试结束后&#xff0c;把试卷和答题纸放在桌上。试卷和答题纸均不得带出考场。监考人收完考卷和答题纸后才可离开考场。 二、仔细读懂题…

生产替代物料_一种替代的多生产者方法

生产替代物料最近在InfoQ上&#xff0c;Aliasei Papou发表了一篇关于他的一些实验的文章 &#xff0c;该实验在线程之间进行了高性能的消息交换。 本文中有许多示例&#xff0c;但我将重点介绍多生产者案例。 文章显示的一种优化方法是&#xff0c;如果您知道初始化时拥有的生产…

2021年春季学期期末统一考试 金融统计分析 试题(开卷)

试卷代号&#xff1a; 1013 2021年7月 一、单项选择题&#xff08;每小题2分&#xff0c;共40分。每小题有一项答案正确&#xff0c;请将正确答案的序号填在括号内&#xff09; 1.以下属于商业银行被动负债的是( )。 A.发行债券 B.同业拆借 C.向中央银行借款 D.存款性负债 2.国…

js清除添加的下拉框html,Html下拉框的定义以及JS、Jquary取值、添加和移除

现在有一idtest的下拉框&#xff0c;怎么拿到选中的那个值呢&#xff1f;分别使用javascript原生的方法和jquery方法//multiply设置可以多行显示&#xff0c;size设置默认显示多少行。text1text2code:一&#xff1a;javascript原生的方法1:拿到select对象&#xff1a; var mys…

信干噪比、信噪比

信干噪比 名词定义 信干噪比SINR&#xff08;Signal to Interference plus Noise Ratio&#xff09;&#xff0c;指的是系统中信号与干扰和噪声之和的比。 信号是指来自设备外部需要通过设备进行处理的电子信号。 干扰是指系统本身以及异系统带来的干扰&#xff0c;如同频干扰…

MicroProfile在Jakarta EE时代的作用

自创建以来&#xff0c;MicroProfile赢得了广泛的关注&#xff0c;并制定了各种规格。 最初&#xff0c;它的创建是为了在多个供应商的推动下&#xff0c;以更快的速度推进微服务世界的企业Java。 现在&#xff0c;随着在Eclipse Foundation下将Java EE转换为Jakarta EE&#x…

矢量图标库如何引入html,Iconfont矢量图标库在网站中的使用方法

原标题&#xff1a;Iconfont矢量图标库在网站中的使用方法大家都知道现在移动端网站设计比较热门&#xff0c;由于移动端的网站页面的收缩性要求很高&#xff0c;必然在网页设计中&#xff0c;一些小点的图标&#xff0c;使用图片收缩性&#xff0c;以及美观上并不是很理想&…

2021年春季学期期末统一考试 劳动与社会保障法(本) 试题

试卷代号&#xff1a; 1021 2021年7月 一、单项选择题&#xff08;每小题1分&#xff0c;共10分。在每小题的四个备选答案中&#xff0c;选出一个正确的答案&#xff0c;请将正确答案的序号填在括号内&#xff09; 1.劳动者的劳动权利能力和劳动行为能力一般开始于( )。 A.14周…

弗林斯传输公式、天线温度

这是被称为弗林斯传输公式。这个等式关系 自由空间路径损耗&#xff0c;天线增益和波长 接收和发射功率。这是一个基本 在天线理论方程&#xff0c;应该记住的&#xff08;以及 上述推导&#xff09;。 弗林斯传输方程的另一种有用的形式是给定的公式[2]。自 波长和频率&#…