当前位置: 首页 > wzjs >正文

佛山网站建设方案咨询西安企业排名

佛山网站建设方案咨询,西安企业排名,百度网站关键词和网址,网页设计怎么加入图片Java异常处理与全局异常处理全面指南 一、Java异常处理基础 1. 异常分类 Java中的异常分为两大类: Checked Exception(检查型异常):必须被捕获或声明抛出,如IOException、SQLExceptionUnchecked Exception&#xf…

Java异常处理与全局异常处理全面指南

一、Java异常处理基础

1. 异常分类

Java中的异常分为两大类:

  • Checked Exception(检查型异常):必须被捕获或声明抛出,如IOException、SQLException
  • Unchecked Exception(非检查型异常):RuntimeException及其子类,如NullPointerException、ArrayIndexOutOfBoundsException

2. 基本异常处理语法

try {// 可能抛出异常的代码
} catch (SpecificException e) {// 处理特定异常
} catch (GeneralException e) {// 处理更一般的异常
} finally {// 无论是否发生异常都会执行的代码
}

3. 异常处理最佳实践

  1. 不要忽略异常:空的catch块是"罪恶"的
  2. 优先处理最具体的异常
  3. 合理使用finally释放资源
  4. 考虑使用try-with-resources(Java 7+)
  5. 避免在finally块中使用return

二、Spring全局异常处理机制

1. @ControllerAdvice + @ExceptionHandler

@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(Exception.class)public ResponseEntity<ErrorResponse> handleAllExceptions(Exception ex) {ErrorResponse error = new ErrorResponse("SERVER_ERROR", "An unexpected error occurred",HttpStatus.INTERNAL_SERVER_ERROR.value());return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);}@ExceptionHandler(ResourceNotFoundException.class)public ResponseEntity<ErrorResponse> handleResourceNotFound(ResourceNotFoundException ex) {ErrorResponse error = new ErrorResponse("NOT_FOUND", ex.getMessage(),HttpStatus.NOT_FOUND.value());return new ResponseEntity<>(error, HttpStatus.NOT_FOUND);}
}

2. 自定义异常类

public class BusinessException extends RuntimeException {private String errorCode;private HttpStatus httpStatus;public BusinessException(String message, String errorCode, HttpStatus httpStatus) {super(message);this.errorCode = errorCode;this.httpStatus = httpStatus;}// getters
}

3. 统一响应格式

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ErrorResponse {private String errorCode;private String message;private int status;private long timestamp;private String path;private List<ValidationError> validationErrors;public ErrorResponse(String errorCode, String message, int status) {this.errorCode = errorCode;this.message = message;this.status = status;this.timestamp = System.currentTimeMillis();}
}@Data
@AllArgsConstructor
public class ValidationError {private String field;private String message;
}

三、高级异常处理技巧

1. 处理验证异常(Validation)

@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<ErrorResponse> handleValidationExceptions(MethodArgumentNotValidException ex) {List<ValidationError> errors = ex.getBindingResult().getFieldErrors().stream().map(error -> new ValidationError(error.getField(), error.getDefaultMessage())).collect(Collectors.toList());ErrorResponse error = new ErrorResponse("VALIDATION_FAILED","Validation failed for one or more fields",HttpStatus.BAD_REQUEST.value(),errors);return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST);
}

2. 国际化异常消息

@ExceptionHandler(BusinessException.class)
public ResponseEntity<ErrorResponse> handleBusinessException(BusinessException ex, WebRequest request,Locale locale) {String message = messageSource.getMessage(ex.getMessageKey(), ex.getArgs(), locale);ErrorResponse error = new ErrorResponse(ex.getErrorCode(),message,ex.getHttpStatus().value());return new ResponseEntity<>(error, ex.getHttpStatus());
}

3. 日志记录策略

@ExceptionHandler(Exception.class)
public ResponseEntity<ErrorResponse> handleAllExceptions(Exception ex, WebRequest request) {logger.error("Unexpected error occurred: {}", ex.getMessage(), ex);ErrorResponse error = new ErrorResponse("SERVER_ERROR","An unexpected error occurred",HttpStatus.INTERNAL_SERVER_ERROR.value(),request.getDescription(false));return new ResponseEntity<>(error, HttpStatus.INTERNAL_SERVER_ERROR);
}

四、实战建议

  1. 分层异常处理

    • 控制器层:处理HTTP相关异常
    • 服务层:处理业务逻辑异常
    • 数据访问层:处理数据相关异常
  2. 异常转换:将底层异常转换为上层业务异常

  3. 异常信息设计

    • 包含足够的信息用于调试
    • 不暴露敏感信息
    • 提供明确的错误代码
  4. 监控与报警:对关键异常设置监控报警

  5. 文档化:为API消费者提供清晰的错误代码和含义文档

五、常见问题解决方案

  1. 处理404错误
@ControllerAdvice
public class CustomErrorController implements ErrorController {@RequestMapping("/error")public ResponseEntity<ErrorResponse> handleError(HttpServletRequest request) {Integer status = (Integer) request.getAttribute("javax.servlet.error.status_code");Exception exception = (Exception) request.getAttribute("javax.servlet.error.exception");ErrorResponse error = new ErrorResponse("NOT_FOUND","Requested resource not found",status);return new ResponseEntity<>(error, HttpStatus.valueOf(status));}
}
  1. 处理跨域异常
@ExceptionHandler
public ResponseEntity<ErrorResponse> handleCorsException(CorsException ex) {ErrorResponse error = new ErrorResponse("CORS_ERROR",ex.getMessage(),HttpStatus.FORBIDDEN.value());return new ResponseEntity<>(error, HttpStatus.FORBIDDEN);
}
  1. 处理文件上传大小限制异常
@ExceptionHandler(MaxUploadSizeExceededException.class)
public ResponseEntity<ErrorResponse> handleMaxSizeException(MaxUploadSizeExceededException exc) {ErrorResponse error = new ErrorResponse("FILE_TOO_LARGE","File size exceeds the allowed limit",HttpStatus.BAD_REQUEST.value());return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST);
}

六、总结

良好的异常处理是构建健壮Java应用程序的关键。通过合理使用Java原生异常机制和Spring的全局异常处理功能,可以:

  1. 提高代码的健壮性和可维护性
  2. 提供一致的用户体验
  3. 便于问题排查和调试
  4. 实现更好的系统监控

记住:异常处理的目标不是消灭所有异常,而是以可控的方式处理异常,并提供有意义的反馈。


文章转载自:

http://qIPFGexs.hrzhg.cn
http://1Aat3MJv.hrzhg.cn
http://xfysCniz.hrzhg.cn
http://eXFyycGe.hrzhg.cn
http://iY7rHp3N.hrzhg.cn
http://iiUK74EU.hrzhg.cn
http://Av9wSoPz.hrzhg.cn
http://3VoAnAFn.hrzhg.cn
http://T6snmy73.hrzhg.cn
http://OVosrQQ9.hrzhg.cn
http://rR3opcuF.hrzhg.cn
http://4QikrcXD.hrzhg.cn
http://njYP6EWw.hrzhg.cn
http://P8uF3RaO.hrzhg.cn
http://Nzeuk0gz.hrzhg.cn
http://DQBWhb8V.hrzhg.cn
http://zOtuo4FZ.hrzhg.cn
http://Xb3ObWiv.hrzhg.cn
http://f0S4rs2I.hrzhg.cn
http://E3sogCrd.hrzhg.cn
http://LqkbALvo.hrzhg.cn
http://FvWkrF8d.hrzhg.cn
http://q2ajRl03.hrzhg.cn
http://b5agSUUG.hrzhg.cn
http://4jJjf5qd.hrzhg.cn
http://xfS35TNV.hrzhg.cn
http://O00YscNf.hrzhg.cn
http://kBYat6Rk.hrzhg.cn
http://gXYKWHjU.hrzhg.cn
http://OXkRQgWR.hrzhg.cn
http://www.dtcms.com/wzjs/737889.html

相关文章:

  • 怎么做网站的百度收录世界最新新闻
  • 湛江市建设局官方网站深圳注册公司育君财税
  • 有限责任公司是私企吗东莞seo推广公司
  • 江门建站公司模板全国免费发布广告信息平台
  • 做网站多少钱特惠西宁君博s打开qq邮箱进入wordpress
  • 网站cn和com哪个做站好wordpress5导航图标
  • 张家港做网站优化排名赣州君拓网络科技有限公司
  • 网站404页面在哪查看街道办的网站由谁做的
  • 二级网站怎样被百度收录陈木胜拍完怒火重案了吗
  • 泰州网站的建设wordpress 扫描工具
  • 六安网站建设wordpress文章中图片
  • 哪里有网站建设高端网站源码
  • 公司网站要多大空间教务系统管理系统
  • 做网站需要租服务器江门网站开发公司
  • 深圳商城网站设计推荐公司中英文网站
  • 网站建设费计入什么科目比较好建筑有限公司官网
  • 山东中讯网站建设成都公司注册地址
  • iis网站怎么做域名绑定域名备案查询站长工具
  • 旅游电网站建设目标企业线上培训平台有哪些
  • 绵阳网站排名装修设计师怎么学室内装修设计
  • 南昌汉邦网站建设2018做网站前景好么
  • 网站服务合同用交印花税吗做网站要买什么空间
  • 网站建设中端口号的作用是什么商务网站创建经费预算
  • 旅游网站怎么做的qq wordpress登陆
  • 胶南做公司网站湖北建设银行网站首页
  • 企业官网建站步骤做网站为什么要服务器
  • 亚马逊做超链接的网站怎么写网站建设的说明
  • 电子商务网站的建设流程是怎样的ASP.NET与网站开发编程实战
  • 青岛西海岸新区城市建设局网站页面设计时最好只使用一种颜色避免视觉效果混响
  • 专业网站优化方案教师遭网课入侵直播录屏曝光口