处理球衣的多重异常

2023-12-09

我们该如何处理MultiException包含 Throwable 对象列表的球衣?

异常映射器技术在一个异常的情况下工作得很好,但如何处理多个异常呢?


您可以通过对 MultiException 调用 getErrors() 来获取异常列表。 MultiException类中定义的方法是:

public List<Throwable> getErrors() {
    synchronized (this.lock) {
        return Collections.unmodifiableList(this.throwables);
    }
}

在映射器中,您可以使用此列表来创建错误响应。这是一个简单的映射器类,可用于处理 MultiException 中的所有异常:

public class MultiExceptionMapper implements ExceptionMapper<MultiException>{    
    private static final String TYPE="ERROR";
    private static final Status ERROR_STATUS=Status.INTERNAL_SERVER_ERROR;

    @Override
    public Response toResponse(MultiException exception) {      
        List<MyResponseError> myErrors=  new ArrayList<>();
        for (Throwable throwable:exception.getErrors()){
            MyResponseError error = new MyResponseError(throwable.getMessage());
            error.setType(TYPE);
            myErrors.add(error);
        }
        Status errorStatus = ERROR_STATUS;      
        ErrorsDTO errors = new ErrorsDTO(errorStatus,myErrors);     
        return errors.generateResponse();   
    }
}

错误响应由 ErrorsDTO 类生成:

@XmlRootElement    
public class ErrorsDTO extends ResponseDTO {        
    private List<MyResponseError> errors;   
    private String status="ERROR";
    private transient Status errorStatus=Status.NOT_FOUND;  
    private int errorCode;

    /**
     * Default constructor is required to support serialization/deserialization
     */
    public ErrorsDTO(){

    }
    /**
     * If status is not provided set status as NOT_FOUND
     * @param error
     */
    public ErrorsDTO(MyResponseError error){
        this(Status.NOT_FOUND,error);
    }
    public ErrorsDTO(Status errorStatus, MyResponseError error){
        List<MyResponseError> errors = new ArrayList<>();
        errors.add(error);
        this.errorStatus= errorStatus;
        this.errors =errors;
    }
    public ErrorsDTO(List<MyResponseError> errors){
        this(Status.NOT_FOUND,errors);
    }

    public ErrorsDTO(Status errorStatus, List<MyResponseError> errors){
        if(errors==null){
            errors = new ArrayList<>();
        }
        this.errorStatus = errorStatus;
        this.errors = errors;
    }

    @Override
    public Response generateResponse() {
        if(this.errorStatus==null){
            this.errorStatus= Status.NOT_FOUND;
        }
        this.errorCode= this.errorStatus.getStatusCode();

        ResponseBuilder builder = Response.status(errorStatus); 
        builder.entity(this);
        builder.type(MediaType.APPLICATION_JSON);
        Response response = builder.build();
        return response;
    }
    @XmlElement(name="errors")
    public List<MyResponseError> getErrors() {
        return errors;
    }
    public void setErrors(List<MyResponseError> errors) {
        this.errors = errors;
    }
    @XmlElement
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    @XmlTransient
    public Status getErrorStatus() {
        return errorStatus;
    }
    public void setErrorStatus(Status errorStatus) {
        this.errorStatus = errorStatus;
    }
    @XmlElement
    public int getErrorCode() {
        return errorCode;
    }
    public void setErrorCode(int errorCode) {
        this.errorCode = errorCode;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理球衣的多重异常 的相关文章

随机推荐

  • 通过简单的适配器在imageview中显示位图图像

    我从网址获取图像 我在列表视图中使用图像视图 我想将位图图像列表添加到列表项的每一行中 我使用 SimpleAdapter 但图像视图显示空白 我的代码如下 ArrayList
  • 使用 c-driver 按索引更新 mongo 数组元素

    为了更新 mongo 数组的元素 我使用了如下语法 set a 0 1238 a 1 402 或者 更准确地说 我正在使用我认为与其等效的 C 驱动程序函数调用 这似乎工作正常 但是当我查看 MongoHub 中的对象时 我看到 a 0 1
  • Python - Pandas 用字符串删除行

    在我的数据集中 我有几行包含字符 我只需要包含所有整数的行 最好的方法是什么 以下数据集 例如 我想删除第 2 行和第 3 行 因为它们分别包含 051A 04A 和 08B 1 2017 0 321 3 20 42 18 2 051A 0
  • 如何编写 PostSharp Invoke 方面来简化跨线程控制更新

    当我想跨线程更新控件时 我通常会这样做 this Invoke MethodInvoker delegate SomeProcedure 建议的方法实际上是调用要更新的特定控件的调用程序 但 99 的情况下 表单 即我的示例中的 this
  • Python 中的 OpenCV:“ImportError:DLL 加载失败”

    关于这个主题已经有很多问题了 但我没有找到关于 DLL not found 传统问题的任何令人满意的答案 我使用的是通过 Anaconda 3 安装的 Python 3 5 我已经用 pip 安装了 官方 opencv python 3 2
  • 根据 WooCommerce 中的总额自动应用百分比或固定购物车折扣

    我正在尝试在客户的 WooCommerce 网站上设置优惠券 以便在购物车总数低于上限金额或固定金额等于或大于上限金额时应用百分比折扣 假设购物车总数的上限为 200 如果购物车总数低于此上限 则应用 10 的折扣 但如果购物车总数为 20
  • Maven 阴影插件是我的 jar 无法在服务器中工作的罪魁祸首吗

    我开发了一个java应用程序并将其制作为jar文件 我使用捆绑了所有依赖项mvn clean packagemaven shade 插件 我的问题是 尽管该应用程序在我的本地计算机上运行良好 但在服务器环境中却无法运行 每当我运行它时 我都
  • Flask 发布到同一页面

    I have from flask import Flask render template import datetime app Flask name app route def hello now datetime datetime
  • 首次购买者将商品添加到购物车

    我有一家 WooCommerce 商店 我正在尝试将特定产品添加到 Woocommerce 购物车中 仅供首次购买者使用 我已经有以下 php 代码 但由于某种原因 它不会起作用 这是我的代码 add action woocommerce
  • ScriptManager 必须出现在任何需要它的控件之前

    我创建了一个新的 ASP NET Web 应用程序 调试后出现服务器错误 ID 为 WaitingPopup1 的控件需要页面上的 ScriptManager ScriptManager 必须出现在任何需要它的控件之前 我是 ASP NET
  • 获取 .model.json 作为字符串

    我想知道是否有一种简单的方法可以通过 AEM 中的 sling 内容导出器的结果获取字符串 在我当前的用例中 我需要组件的 htl 文件中的组件 model json 输出的内容 并且发送额外的请求显然不是一个好主意 关于如何获取数据有任何
  • 读取大文本文件中的行数 VB6

    我有大小为 230MB 的文本文件 我想计算该文件的行数 我试过 Scripting FileSystemOblect 但它已经从记忆中消失了 请帮忙 Thanks 正常的 Windows 换行符是 CRLF 因此您可以对 LF 进行计数
  • Reactor 和 Webflux 中的 Mono 链超时算子到底测量了什么?

    我正在使用 Spring Webflux 并试图理解 Monos 链的超时概念 例如 有一系列 Mono 调用 myService firstOperation then myService secondOperation then myS
  • 目标 C:下载带进度条的文件 [重复]

    这个问题在这里已经有答案了 我正在尝试放置一个在下载过程中同步的进度条 我的应用程序现在可以使用此代码下载文件 pdfData NSData alloc initWithContentsOfURL NSURL URLWithString h
  • HLS 流无法在 Apple 设备上运行

    我有一个实时 RTSP 流 我已设法通过 VLC 将其转码为 HLS 现在它可以在 Android 和桌面浏览器上完美运行 通过 Flash 但在 Apple 上不行 我可以在我的虚拟机上的 iPad 和桌面 Safari 上进行测试 我可
  • 使用 XML 字段 Vs.为不稳定的组织创建一个表

    我正在设计一个为组织开具和存储发票的应用程序 问题是这个组织根本不稳定 发票的种类很多 并且可能会增加和变化 首先 我尝试在 DAL 中使用表 一张表用于存储发票 一张表用于发票字段 一张表用于发票字段值 问题是 这种方式需要反射来稍后检测
  • gethostbyaddr 在 Windows 上可以,但在 Linux 上返回 NULL

    这段代码在 Windows 上运行正常 但在 Linux 上 gethostbyaddr 返回 NULL 我尝试了很多改变 但没有成功 我的 etc host conf 有以下行 订购主机 绑定 我运行完整的代码并传递地址 11 234 4
  • C 中的多处理和管道

    我正在努力学习如何与fork 创建新流程并pipes与每个进程进行通信 假设我有一个包含 20 个单词的列表 并且创建了 3 个进程 现在 我需要使用管道在进程之间分发单词 每个进程都会对其接收到的单词列表进行排序 我想要实现这一目标的方式
  • 静态 Azure 托管中的子文件夹

    我想使用 Azure blob 文件存储来托管静态网站 如果 html 页面位于 web storage 的根文件夹中 则效果很好 但是 如果我将网页放入子文件夹中 相对链接 例如 css 文件 将不再起作用 因为它们被解释为基于根的链接
  • 处理球衣的多重异常

    我们该如何处理MultiException包含 Throwable 对象列表的球衣 异常映射器技术在一个异常的情况下工作得很好 但如何处理多个异常呢 您可以通过对 MultiException 调用 getErrors 来获取异常列表 Mu