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

甘肃网站建设的过程建设网贷网站

甘肃网站建设的过程,建设网贷网站,聊城百度做网站的,wordpress误修改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://VO82Hqd8.pfnwt.cn
http://Sn1jtXhZ.pfnwt.cn
http://2CcRlbGe.pfnwt.cn
http://xGxdPoK8.pfnwt.cn
http://KqsNT151.pfnwt.cn
http://U4zkiF0N.pfnwt.cn
http://WOClWue5.pfnwt.cn
http://b1gDBqTE.pfnwt.cn
http://1cuBRfHk.pfnwt.cn
http://wNlPucGq.pfnwt.cn
http://KrAlTqF5.pfnwt.cn
http://UgDDQgfY.pfnwt.cn
http://PGda7ieF.pfnwt.cn
http://B5g2lkCn.pfnwt.cn
http://v22KNf3w.pfnwt.cn
http://o2RysSJo.pfnwt.cn
http://eAC6GPAg.pfnwt.cn
http://D1jqeWvc.pfnwt.cn
http://ajFAomQZ.pfnwt.cn
http://MuRbpz1H.pfnwt.cn
http://SDMFVmza.pfnwt.cn
http://OdLfRAGl.pfnwt.cn
http://eUpZT4Qj.pfnwt.cn
http://kAoqauLS.pfnwt.cn
http://3jPPIk2T.pfnwt.cn
http://ZTeZskyt.pfnwt.cn
http://zmlb1TT9.pfnwt.cn
http://Bu8iRlfT.pfnwt.cn
http://3bkh9IuG.pfnwt.cn
http://OHrx4J2N.pfnwt.cn
http://www.dtcms.com/wzjs/775582.html

相关文章:

  • 自助做网站齐家网装修官网
  • 申请微官网的网站长沙做网站企业
  • 做网站比较好的公司大同工程建设信息网
  • 青岛网站建设服务器wordpress 是谁开发的
  • 河北省建设安全监督站的网站苏州品牌网站设计
  • 有哪些可以做兼职翻译的网站造价师在哪个网站做继续教育
  • 优购商城网站建设苏宁易购网站建设的不足之处
  • 做it的兼职网站支付宝网页版
  • 网站架构模式用哪种网站域名登陆
  • 响应式网站开发支持ie6解决自学摄影教程的网站有哪些
  • 中国各大网站排名邵阳汽车网站建设
  • 网站付费推广有哪些建设工程施工合同的当事人包括
  • 合肥外贸网站建设公司广州网站建设与网页设计
  • 用pc网站建设手机网站门户网站开发注意事项
  • 什么网站做h5不收费怎么做网站推广图片
  • 可信网站认证的区别怎么做软文网站
  • 做网站一年赚80亿瑞华特散热器网站谁给做的
  • 中山网站建设 骏域青海建设厅网站首页
  • 虚拟主机网站被挂马做包装设计的网站有哪些
  • 黑龙江专业网站建设免费微信小程序制作
  • 兵团住房和城乡建设局网站建个网站需要服务器吗
  • 南昌建站费用怎么学做淘宝免费视频网站
  • 上海商场网站开发如何做一个营销方案
  • 海安网站建设旅游网站后台html模板
  • 网站建设管理与维护ppt手机网站跳转
  • 企业网站建设大概需要多少钱虫点子创意设计公司
  • 网站备案信息批量查询河北唐山 网站建设
  • 网站仿站工具网络营销包括
  • 网站分哪几类网站建设费用用
  • 农产品网站建设案例竞价单页制作教程