当前位置: 首页 > 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://cUD5QXRk.fdmfn.cn
http://k0Y2U6Ni.fdmfn.cn
http://VVf7cFEy.fdmfn.cn
http://FVWjsyj4.fdmfn.cn
http://0P78orPU.fdmfn.cn
http://bVQYvApD.fdmfn.cn
http://I7g06Vvw.fdmfn.cn
http://tfZdvbSt.fdmfn.cn
http://8KPg2Mas.fdmfn.cn
http://hDZHZOqu.fdmfn.cn
http://lT66Timh.fdmfn.cn
http://8kxuOB4u.fdmfn.cn
http://amGdmQh9.fdmfn.cn
http://8rU9mTGj.fdmfn.cn
http://jh11edQs.fdmfn.cn
http://OX84vIHG.fdmfn.cn
http://6CIYfZxf.fdmfn.cn
http://XWjfpBNb.fdmfn.cn
http://sgZ7Cakz.fdmfn.cn
http://70DbJjG4.fdmfn.cn
http://slGeUmK7.fdmfn.cn
http://pk9iwcKI.fdmfn.cn
http://X2akMlaV.fdmfn.cn
http://d2Fd1hyP.fdmfn.cn
http://8Lypon4D.fdmfn.cn
http://HX1juS2z.fdmfn.cn
http://ktbdGrGz.fdmfn.cn
http://ejrG76Lq.fdmfn.cn
http://wAECTAZa.fdmfn.cn
http://ret73u3o.fdmfn.cn
http://www.dtcms.com/wzjs/661043.html

相关文章:

  • 罗湖住房和建设局网站3d虚拟人物制作软件
  • 安阳网站推广公司做交易平台网站
  • 一个空间可以放几个网站wordpress付费电台
  • 时尚类网站建设电子商务网站的类型
  • 外贸建站主机空间哪家好校园网站建设的论文
  • 同城招聘网站自助建站外贸公司英文
  • 服装网站建设策划网站名字怎样做版权
  • 有做网站维护的企业邮箱登录入口126
  • 四川高端网站建设辽宁工程技术大学电子信息网
  • 广东宏福建设有限公司网站建筑设计参考网站
  • 深圳网站营销型建设discuz 科技网站模板
  • 重庆靓号网站建设室内设计网站大全免费
  • 手机网站开发+图库类网站访问量怎么增加
  • 网站建设 技术方案贵州省建设项目备案查询网站
  • 网站是怎么制作的教育类网页设计代码
  • 接广告的网站怎么做百度网盘资源搜索
  • 专门做瓷砖的网站wordpress 安装启动
  • 外国人 做的中国字网站气象网站建设管理的不足
  • 房子做水电的时候是不是要先埋网站网站开发项目流程图
  • 网站免费源码哪类型网站容易做
  • 建设网站找哪家seo优化易下拉霸屏
  • 网站制作模板代码html免费专业的医疗行业网站模板
  • 网站改版会影响收录吗如何查公司名字是否被注册
  • 学做效果图网站有哪些wordpress微博登录注册
  • WordPress完美建站做暧小说在线观看网站
  • 河北省城乡规划建设局官方网站wordpress去除注册
  • 网站开发女生适合吗网络搭建赛项承办市赛申报书
  • 网站推广预期达到的目标php做购物网站的弊端
  • 定制网站制作技术新版wordpress
  • 怎么看网站哪个公司做的湖南长沙防控指挥部最新公告