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

福州网站建设服务平台上海牛巨微seo

福州网站建设服务平台,上海牛巨微seo,中国设计师排名,鱼馆网站的前期策划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://www.dtcms.com/wzjs/7620.html

相关文章:

  • 电子商务网站的建设内容网页制作培训网站
  • 武汉可以做网站的地方电子商务网站建设与维护
  • 用来做网站的软件长沙网站优化排名推广
  • 阿里云 个人网站搜索引擎排名中国
  • 中国做室内设计的网站市场营销策划方案
  • 常州网站建设市场技能培训班有哪些
  • 杭州网站建设提供商整合营销方案案例
  • 网站专门做冻品的网络营销方式与工具有哪些
  • 北京专业做网站链接提取视频的网站
  • 在网上找做设计是什么网站免费公司网址怎么注册
  • 网站开发发展和前景微信群推广
  • 微信公众号同步wordpress天津海外seo
  • 网站做支付链接安全吗seo怎么做优化计划
  • 南京设计网站我赢seo
  • 网站建设需要注意哪些问题百度收录快的发帖网站
  • 做网站有哪个空间企业qq怎么申请
  • 做网站 用什么建站软件好如何注册属于自己的网站
  • 常见的动态网站开发技术如何快速推广网站
  • 如何用cms做网站昆山网站制作公司
  • 个人网站建设实验心得手游推广个人合作平台
  • php java开发网站开发seo关键词排名软件流量词
  • 常州市政府建设局网站百度地图排名怎么优化
  • 呼和浩特公司网站制作更厉害的病毒2024
  • 免费的行情软件网站下载不用下载网站排名优化怎么做
  • 做视频的网站域名注册
  • 建设项目环保备案网站注册域名后如何建立网站
  • 营销型网站建设公司比较专业安庆seo
  • 网站建设的会计科目发帖子最好的几个网站
  • 通过ip访问网站需要怎么做百度广告投诉电话
  • 镇江平面设计关键词优化排名软件流量词