具有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,一经查实,立即删除!

相关文章

Ad-hoc

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

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

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

Multi-commodity Flow Problem

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

信干噪比、信噪比

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

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

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

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

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

马尔可夫决策过程 Markov decision process MDP, 连续时间Markov chain, CMDP(全)

引言 在概率论及统计学中&#xff0c;马尔可夫过程&#xff08;英语&#xff1a;Markov process&#xff09;是一个具备了马尔可夫性质的随机过程&#xff0c;因为俄国数学家安德雷马尔可夫得名。马尔可夫过程是不具备记忆特质的&#xff08;memorylessness&#xff09;。换言…

Spring Boot完成示例

这篇文章提供了一个使用Spring Boot开发松耦合REST服务的完整示例。 使用spring boot&#xff0c;我们可以开发可独立运行的生产就绪Java应用程序&#xff0c;它是独立的应用程序&#xff0c;具有最小的依赖性&#xff0c;并且与其他应用程序的耦合较少。 大多数时候&#xff0…

最小生成树、最短路径树

一、最小生成树与最短路径树的区别 最小生成树能够保证整个拓扑图的所有路径之和最小&#xff0c;但不能保证任意两点之间是最短路径。 应用如网络部线&#xff0c;把所有的电脑(服务器&#xff1f;&#xff09;都连起来用的网线(光纤&#xff1f;&#xff09;最少&#xff0c…

卫星链路

卫星通信系统中&#xff0c;信息传输中&#xff0c;一条传输链路包括发端地球站、上行链路、卫星转发器、下行链路、收端地球站。按照空间分布可以分为星地链路和星间链路。影响其通信性能的因素主要有&#xff1a;发射端的发射功率与天线增益、传输过程中的损耗、传输过程中所…

计算机网络组成包括哪些内容,计算机网络系统的组成

互联网时代已经到来了&#xff0c;小编为你科普一下网络相关基础知识《计算机网络系统的组成》&#xff0c;让你更快融入互联网时代。计算机网络系统是通信子网和资源子网组成的。而网络软件系统和网络硬件系统是网络系统赖以存在的基础。在网络系统中&#xff0c;硬件对网络的…

正定和半正定

在众多的机器学习模型中&#xff0c;线性代数的身影无处不在&#xff0c;当然&#xff0c;我们也会时常碰到线性代数中的正定矩阵和半正定矩阵。例如&#xff0c;多元正态分布的协方差矩阵要求是半正定的。 ------------------------------------------ 1. 基本的定义 正定和…

HTML中button怎么填充GIF,css3给按钮添加背景渐变动画

css3给按钮添加背景渐变动画button {color:#FFF;font-size:16px;outline:none;width:300px;height:48px;background:#26A1D9;border:none;-webkit-border-radius:5px;border-radius:5px;}button:active{outline:none;background:#208FC1;/*执行动画*/-webkit-animation:showBtn…

导数,微分,偏导,全微分,方向导数,梯度

多元函数与一元函数有一个很大的区别在于定义域的不同&#xff1a;一元函数自变量就在x轴上&#xff0c;因此趋近的方向只有某点的左右两侧&#xff0c;因此&#xff0c;考察一元函数极限的时候&#xff0c;仅考虑左邻域和右邻域即可。但是多变量微分变得复杂&#xff0c;趋向方…

牛顿法, Jacobian矩阵 和 Hessian矩阵

牛顿法 主要有两方面的应用&#xff1a; 求方程的根&#xff1b;求解最优化方法&#xff1b; 为什么要用牛顿法求方程的根&#xff1f; 问题很多&#xff0c;牛顿法 是什么&#xff1f;目前还没有讲清楚&#xff0c;没关系&#xff0c;先直观理解为 牛顿法是一种迭代求解方法…

奇异矩阵,非奇异矩阵,伪逆矩阵

奇异矩阵就是Singular Matrix 的中文翻译。 Singular 就是唯一的&#xff0c;可以想成是单身狗&#xff0c;所以他没有对象 逆矩阵。 Non-singular的非奇异矩阵就是Couple 有逆矩阵。 奇异矩阵 奇异矩阵是线性代数的概念&#xff0c;就是对应的行列式等于0的矩阵。 奇异矩阵…

ActiveMQ性能测试

我们使用ActiveMQ作为消息传递层–发送大量需要低延迟的消息。 通常它可以正常工作&#xff0c;但是在某些情况下我们遇到了性能问题。 在花了太多时间测试我们的基础架构之后&#xff0c;我想我已经学到了有关ActiveMQ的一些有趣的东西&#xff1a;它可能真的很慢。 尽管一般…

计算机网络严楠,安徽工程大学

安徽工程大学是一所以工为主的省属多科性高等院校&#xff0c;是安徽省高校综合改革首批试点院校、安徽省系统推进全面创新改革试验高校创新自主权改革试点单位&#xff0c;入选教育部新工科研究与实践项目。 学校办学历史始于1935年创设的安徽私立内思高级工校&#xff0c;历经…

垃圾收集算法,垃圾收集器_垃圾收集器准则和提示

垃圾收集算法,垃圾收集器这些是我需要调整GC时通常会看到的一些准则和技巧。 主要由以下两本书组成&#xff0c;而根据我的经验却很少&#xff1a; Java性能 JBoss AS 5性能调优 希望它们对在那里的其他人有用&#xff01; 垃圾收集器 XX:AggressiveOpts将HotSpot内部布尔变…

3SAT问题

3-Satisfiability (3Sat) https://samjjx.github.io/2019/03/14/3sat2ds/