Jersey全局异常处理器

全局异常处理器:优雅处理Java应用中的异常情况 在Java应用开发中,异常处理是至关重要的一环。无论是在业务逻辑中还是在外部依赖调用中,异常都可能随时发生。然而,合理的异常处理不仅可以保障应用的稳定性,还能提供更好的用户体验和问题排查。在本篇博客中,我们将深入探讨全局异常处理器,这是一种强大的异常处理方案,用于优雅地处理Java应用中的异常情况。我们将学习如何实现一个全局异常处理器,捕获并处理应用中抛出的异常,使得应用在出现异常时能够有序地做出响应。通过统一处理异常信息,我们可以记录日志、向用户提供友好的错误信息,并保障应用的稳定性。 阅读详情
全局异常处理器


webservice定义全局返回错误码,是很重要的一个功能,jersey正好就能实现这一功能.


整个流程就是当jersey托管的类发现了异常,
抛出给jersey的异常处理器,
该异常处理器直接返回自定义的错误代码.


1.定义异常代码


可以使用枚举类,也可以写到配置文件中,再写个工具类获取.看项目需求了.

public enum ErrorCode {
    OK(0,"OK"),ID_INVALID(1,"ID is invalid"),OTHER_ERR(2,"未知错误");

    private int code;
    private String message;

    ErrorCode(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

2.定义出现异常将返回的实体代理


也就是封装异常信息到这个类中,再转换为json串返回,如果自己直接构造字串也是可以代替的

@XmlRootElement//标识该资源可以被jersey转为json或者xml
public class ErrorEntity {
    private int resp_code;
    private String resp_msg;

    public ErrorEntity(int resp_code, String resp_msg) {
        this.resp_code = resp_code;
        this.resp_msg = resp_msg;
    }
    public ErrorEntity() {
    }

    public int getResp_code() {
        return resp_code;
    }

    public void setResp_code(int resp_code) {
        this.resp_code = resp_code;
    }

    public String getResp_msg() {
        return resp_msg;
    }

    public void setResp_msg(String resp_msg) {
        this.resp_msg = resp_msg;
    }
}

3.自定义异常


自定义异常,处理时拦截该指定异常

public class DeviceException extends Exception {
    private int code;
    private String message;

    /**
     * 构造异常类
     * @param code
     * @param message
     */
    public DeviceException( int code,String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 根据枚举类构造异常结果
     * @param errorCode
     */
    public DeviceException(ErrorCode errorCode) {
        this.code = errorCode.getCode();
        this.message = errorCode.getMessage();
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    @Override
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}
4.定义jersey异常处理器


异常处理器要实现ExceptionMapper<Exception>接口,并复写返回方法,另外一定要使用@Provider标识该类为一个jersey的’处理器’,如下:

@Provider
public class DeviceExceptionMapper implements ExceptionMapper<Exception> {

    @Override
    public Response toResponse(Exception e) {
        Response.ResponseBuilder ResponseBuilder = null;

        if (e instanceof DeviceException){

            //截取自定义类型
            DeviceException exp = (DeviceException) e;
            ErrorEntity entity = new ErrorEntity(exp.getCode(),exp.getMessage());
            ResponseBuilder = Response.ok(entity, MediaType.APPLICATION_JSON);
        }else {
            ErrorEntity entity = new ErrorEntity(ErrorCode.OTHER_ERR.getCode(),e.getMessage());
            ResponseBuilder = Response.ok(entity, MediaType.APPLICATION_JSON);
        }
        System.out.println("执行自定义异常");
        return ResponseBuilder.build();
    }
}

5.注册该异常


在RESTApplication中要加载该异常,可以使用package扫包,或者直接注册异常都是可以的.


public class RESTApplication extends ResourceConfig {
    public RESTApplication() {

        //想让jersey托管的部分需要加入扫描,或者使用register指定托管类也可以
        packages("com.haikong.resources","com.haikong.exception");
        //加载日志包
        register(LoggingFilter.class);
        //加载json转换器
        register(JacksonJsonProvider.class);
        System.out.println("加载RESTApplication");
    }
}

6.测试

/**
  * 测试全局异常托管
  * @throws DeviceException
  */
  @GET
  @Path("/testexception")
  public void testException() throws DeviceException {
	if (true){
	    throw new DeviceException(ErrorCode.OTHER_ERR);
	}
  }


7.返回结果

{
"resp_code": 2,
"resp_msg": "未知错误"
}

转自:http://blog.youkuaiyun.com/u012706811/article/details/52054157

资源实例下载:http://download.youkuaiyun.com/detail/sotong006/9913077

Spring Boot 中的全局异常处理器 全局异常处理器是一种集中处理应用程序中所有未被捕获异常的机制。在Spring Boot中,可以通过创建一个带有注解的类来实现全局异常处理器。这个注解使得类中的方法能够处理所有控制器(带有或注解的类)抛出的异常。首先,定义一些自定义异常类,以便于区分不同类型的异常。为了提供结构化的错误信息,可以定义一个错误响应类,包含错误码、错误消息等信息。在业务逻辑中,当遇到特定情况时,可以抛出自定义异常。 阅读详情

相关推荐

Spring框架与容器内测试技术解析

本文探讨了容器内测试框架如Arquillian和Jersey测试框架的优缺点,对比了构造器注入与setter注入在处理循环依赖上的差异,并提供Spring中基于XML和Java配置的Bean管理示例。此外,还涵盖了异常处理、区域设置解析、JPA供应商切换及BLOB数据处理等关键Spring开发主题。

butter的博客 952

全局异常处理器

​ 如果是在Mapper层出现异常,会抛给Service,Service会抛给Controller,Controller最终会返回给框架,框架会响应一串JSON数据,里面封装的错误的信息,但是框架封装的JSON数据并不符合我们的开发规范。​ 方案二: 全局异常处理器。Controller抛出的异常没有处理,最终会抛给全局异常处理器处理,处理完后再给浏览器响应统一处理结果集。所以在全局异常处理器中的返回结果还是JSON数据。​ 未做处理。

weixin_51351637的博客 1847

机械臂开发必备:KDL库正逆解与动力学实战指南

在机器人算法领域,运动学与动力学计算是机械臂控制、仿真与轨迹规划的核心基础。正运动学描述关节空间到笛卡尔空间的映射,逆运动学则需要求解复杂的非线性方程,工程实现时常面临数值稳定性与调试效率的挑战。KDL(Kinematics and Dynamics Library)作为ROS生态中广泛使用的开源库,提供了统一的模型描述与高效求解器,将正逆解、雅可比矩阵及动力学参数计算封装为简洁接口,大幅降低开发门槛。无论是机械臂的笛卡尔空间轨迹跟踪,还是基于动力学模型的前馈控制,KDL都展现出强大的工程价值。本文从运动学

weixin_33860528的博客 2505

SpringBoot全局异常处理详解

全局异常处理器可以通过注解来创建,它会捕获整个应用中抛出的异常。// 日志记录异常信息logger.error("发生异常:", e);// 根据异常类型返回不同的错误信息return ResultBody.error("算术异常,请联系管理员");} else {return ResultBody.error("未知异常,请联系管理员");在这个例子中,方法会捕获所有的异常,并返回一个统一的错误响应体ResultBody。为了更优雅地处理业务逻辑中的异常,我们可以定义自己的异常类。

ning的博客 2110

手把手教你玩转CPU微架构专栏--​​​​第二章:流水线——微架构的“效率引擎”​​​​2.4 超标量与超线程:如何突破“单指令流”的限制?

例如,Intel酷睿i5-13600K拥有6个性能核(P核,支持超线程,共12线程)和8个能效核(E核,无超线程,共8线程),兼顾多线程性能与能效比。通过引入“物理寄存器”替代“逻辑寄存器”(如x86的RAX、RBX),消除数据冒险中的“假依赖”(False Dependency)。引入“混合架构”(Performance Core+Efficient Core),大核(P核)专注高性能任务,小核(E核)处理后台任务;​:6发射超标量,IPC≈3.5(通过3D V-Cache优化缓存,进一步提升效率)。

xiaoheshang_123的博客 954

FPGA实战:用DDR3和乒乓操作解决视频帧撕裂问题(附Verilog代码)

本文详细介绍了如何利用DDR3内存和乒乓操作架构解决FPGA视频处理中的帧撕裂问题。通过多帧缓存原理、AXI接口配置和自适应乒乓操作设计,有效隔离读写操作,确保视频流稳定传输。文章包含Verilog代码实现和性能优化技巧,适用于工业相机、医疗影像等高速视频处理场景。

m2n3b4v5c6的博客 289

文件上传、拦截器及全局异常处理

目录1.文件上传1.异步文件上传【任务1】:实现上传头像的功能。用户选择本地图片,单击上传按钮调用后端接口可以实现将图片保存到文件服务器中,同时在页面中显示上传的图片。1.1.异步文件上传-简易文件服务器搭建验证文件服务器的搭建运行tomcat控制台输出乱码1.1.异步文件上传-视图设计 ​编辑1.3.异步文件上传-解析配置1.4.异步文件上传-远程调用依赖导入 1.5. 异步文件上传-后端接口定义 2.Spring MVC拦截器综述拦截器应用场景拦截器创建拦截器preHandle方法拦截器postHand

像污秽一样的博客 1333

馈电网络设计:通过Smith圆图工具完成微带线到同轴探针的阻抗匹配

Smith圆图通过图形化阻抗变换路径,显著简化微带线到同轴探针的匹配设计。设计需结合理论计算(微带线阻抗公式、探针等效模型)、圆图操作(串联/并联元件移动规则)及仿真验证,最终实现宽带低反射匹配。

百态·数智思维 | 聚焦大数据、量化与未来AI 1106

Airbyte Google Ads 连接器指南:基于 GAQL 的 Attributes、Metrics 与 Segments 数据模型解析

Google Ads API(本仓库中 Airbyte 连接器称为 GAds API)本质上是在 Google Ads 资源之上提供的一层 SQL 查询接口,其查询语言名为 GAQL(Google Ads Query Language)。本指南以 `airbyte-integrations/connectors/source-google-ads/BOOTSTRAP.md` 为主线,讲解 GAQL

gitblog_00459的博客 640

CHNS数据库下载与使用指南:从申请到导入的全流程解析

面板数据是经济学与公共卫生实证研究的重要支撑。中国健康与营养调查(CHNS)自1989年持续追踪中国居民的家庭与个人健康、营养及经济行为,为研究者提供了跨度近三十年的纵向微观数据。理解CHNS的数据组织原理与申请机制,是高效利用该数据的前提。该数据广泛适用于健康经济学、膳食营养分析及公共政策评估等场景。围绕CHNS的下载流程,完整梳理了注册申请、数据文件解析以及Stata、R、Python三种工具的读取方法,并针对邮箱验证、文件损坏、ID匹配等常见问题提供排查建议,帮助研究者快速建立数据处理基础。

weixin_33624741的博客 283

代谢组数据分析(二十一):通过MetaboAnalystR标准化构建sPLSDA预测模型

本文介绍了如何使用R语言中的MetaboAnalystR包和mixOmics包进行代谢组学数据的标准化和sPLSDA分析。MetaboAnalystR包用于数据预处理,包括数据初始化、清洗、补足、过滤和标准化等步骤,以确保数据质量。mixOmics包则用于sPLSDA分析,通过Lasso惩罚进行变量选择,并建立分类模型。文章详细说明了安装和加载相关R包的步骤,并提供了数据导入和预处理的代码示例。最后,强调了数据预处理的重要性,以确保后续分析的准确性和可靠性。

专注生信领域 2426

Spring MVC和Spring Boot有什么区别? 这样答,面试官直呼666

Spring MVC和Spring Boot有什么区别? 这样答,面试官直呼666 作为初级程序员,这样的问题在面试中,也被问到过,随着越来越了解,发现以前自己答的真水。 一般的回答 ​ 先来说说我以前的粗浅的回答: 两者没有什么大关系,除了都是Spring家族里的。 Spring mvc 是web层的框架,通过Controller提供Http接口服务。 Spring Boot 是一种快速搭建的脚手架,通过依赖各种Starter,省略了Spring特别多而繁琐的xml配置。 分析问题 问spr

过了这个村没这个老王的博客 1万+

【智能车Code review】——小S与中S道路判断

基本思想: 找到中线的左拐点和右拐点,并且计算出两点之间的空间距离。通过限制空间距离,分为中S和小S。 注意这种情况:当20行以下的中线斜率比较陡,此时可以通过人为限制设定,将第0行的中线设置为拐点。 if (flag_centre_right_point == 0 && flag_centre_left_point == 1 && parameterB >= 0.5 && centre_left_point[0] >= 33) { .

hanhan的博客 6102

全局异常处理器——优雅的处理异常

封装自定义异常类,用于自定义异常抛出,根据实际情况对业务异常进行更细致和明确的拓展;

xianren95的博客 4552

深度解读 ABAP CDS View 中的 @Analytics.dataCategory: #FACT 注解

注解在 ABAP CDS View 中具有重要意义。它不仅定义了当前视图在数据模型中的角色,还为后续的分析和报告奠定了基础。在实际开发中,通过合理使用这一注解,可以显著提升数据模型的可用性和系统性能。无论是简单的 KPI 展示还是复杂的多维分析,这一注解都能发挥关键作用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 787

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java后端全局异常处理器详细教程

全局异常处理器(Global Exception Handler)是Spring框架提供的一种统一处理异常的机制,它允许开发者在一个集中的地方捕获和处理应用程序中抛出的各种异常,而不是在每个控制器方法中单独处理。全局异常处理器是Java后端开发中非常重要的组件,它能帮助我们:集中处理异常保持代码整洁提供一致的错误响应提高应用程序的可维护性通过本教程,你应该已经掌握了全局异常处理器的基本用法和高级技巧。

weixin_52578852的博客 5304

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SpringBoot之全局异常处理器

在全局异常处理器当中,需要定义一个方法来捕获异常,在这个方法上需要加上注解@ExceptionHandler。通过@ExceptionHandler注解当中的value属性来指定我们要捕获的是哪一类型的异常。定义全局异常处理器非常简单,就是定义一个类,在类上加上一个注解@RestControllerAdvice,加上这个注解就代表我们定义了一个全局异常处理器。处理异常的方法返回值会转换为json后再响应给前端。我们该怎么样定义全局异常处理器?

qq_62254095的博客 332

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Spring Boot中全局异常处理器

在项目中自定义一个全局异常处理器,在异常处理器上加上注解 @ControllerAdvice,可以通过属性annotations指定拦截哪一类的Controller方法。并在异常处理器的方法上加上注解 @ExceptionHandler 来指定拦截的是那一类型的异常。注解提供了一种在控制器中处理异常的机制,能够根据不同类型的异常来执行不同的异常处理逻辑,使代码更加清晰和易于维护。采用这种方式来实现,我们只需要在项目中定义一个通用的全局异常处理器,就可以解决本项目的所有异常。: 指定拦截那些类型的控制器;

m0_74212228的博客 5034

Spring Boot全局异常处理器(原理及使用详解)

软件开发springboot项目过程中,不可避免的需要处理各种异常,spring mvc架构中各层会出现大量的try{…} catch{…} finally{…}代码块,不仅有大量的冗余代码,而且还影响代码的可读性。这样就需要定义个全局统一异常处理器,以便业务层再也不必处理异常。Spring在3.2版本增加了一个注解@,可以与@ExceptionHandler、@InitBinder、@ModelAtribute等注解配套使用。

weixin_45131680的博客 4923

全局异常处理器(Global Exception Handler)

/ 统一返回结构// getter/setter 省略// getter优势说明✅ 统一错误格式前端无需处理各种异常结构✅ 解耦业务逻辑Controller 只关注业务,不写 try-catch✅ 提升可维护性异常处理集中管理✅ 增强安全性避免敏感信息泄露通过全局异常处理器,你的 Spring Boot 应用将具备更专业、稳定的 API 行为。建议结合自定义异常 + 参数校验 + 日志监控构建完整异常体系。

u010448530的博客 1025

Spring Boot全局异常处理

全局异常处理器是一个用于处理应用程序中未处理的异常的组件。当应用程序抛出未处理的异常时,全局异常处理器会捕获该异常并执行相应的操作,例如记录日志、返回错误信息等。在Spring Boot中,我们可以通过实现接口或使用注解来创建全局异常处理器。除了处理应用程序中的未处理异常之外,我们还可以自定义异常,并在全局异常处理器中处理这些异常。自定义异常可以帮助我们更好地组织代码,并提高代码的可读性和可维护性。在上面的示例中,我们定义了一个类,该类继承自类。

果酱 の 博客 4375

Jersey Rest 异常统一处理机制

前言:         异常分为运行时异常和非运行时异常,所谓的运行时异常是指那些不需要异常捕获的异常,总是交由虚拟机接管,如:ArrayIndexOutOfBoundsException,我们在写程序时,并没有使用try..catch来捕获它。     以前,我们进行项目开发时,习惯性的喜欢使用大量的try...catch...finally方法来进行异常处理,并且,只是将异常信息保存到lo

NIITYZU的专栏 6391

2021-11-09全局异常处理器的使用。

全局异常处理器的快速使用

J_XiaoW的博客 324
上一篇: 过滤器
下一篇: Jersey拦截器
sotong006
博客等级 码龄12年 27粉丝 102原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值