黑马JAVAWeb-11 请求参数为数组-XML自动封装-XML手动封装-增删改查-全局异常处理-单独异常分别处理

1.请求参数的接收-通过数组-Controller

  • 自动封装
  • 手动封装



    2.异常处理
  • 问题:后端服务器异常,但是前端点击保存,没有任何反应
  • 使用try-catch捕获并处理
  • 若项目够大,每一个异常都要单独写个try-catch

    - 全局异常处理器 是 Spring 项目中用于统一捕获和处理项目中所有未被捕获的异常的组件,能避免异常直接暴露给用户,同时规范异常响应格式,简化异常处理逻辑
  • 核心就是在类上加上注解@RestControllerAdivce
  • 在方法上加上注解@ExceptionHandler
  • 单独处理不同的异常
java 复制代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.multipart.MaxUploadSizeExceededException;

/**
 * 全局异常处理器
 * 注解 @RestControllerAdvice 表示:
 * 1. 该类是全局异常处理的切面类
 * 2. 所有 @RestController 注解的控制器抛出的异常会被这里捕获
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    /**
     * 处理自定义业务异常(最常用)
     */
    @ExceptionHandler(BusinessException.class)
    public Result<Void> handleBusinessException(BusinessException e) {
        log.error("业务异常:{}", e.getMessage());
        // 返回自定义错误码和信息
        return Result.error(e.getCode(), e.getMessage());
    }

    /**
     * 处理参数校验异常(如 @Valid 注解触发的校验失败)
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST) // 响应HTTP状态码400
    public Result<Void> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        BindingResult bindingResult = e.getBindingResult();
        // 提取第一个参数错误信息
        FieldError firstError = bindingResult.getFieldErrors().get(0);
        String errorMsg = firstError.getField() + ":" + firstError.getDefaultMessage();
        log.error("参数校验异常:{}", errorMsg);
        return Result.error(400, errorMsg);
    }

    /**
     * 处理文件上传大小超限异常
     */
    @ExceptionHandler(MaxUploadSizeExceededException.class)
    public Result<Void> handleMaxUploadSizeExceededException(MaxUploadSizeExceededException e) {
        log.error("文件上传异常:{}", e.getMessage());
        return Result.error(413, "文件大小超过限制,请上传更小的文件");
    }

    /**
     * 处理所有未被捕获的异常(兜底处理)
     */
    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) // 响应HTTP状态码500
    public Result<Void> handleException(Exception e) {
        // 记录详细异常堆栈,方便排查问题
        log.error("系统异常:", e);
        // 给用户返回友好提示(不暴露具体错误信息)
        return Result.error(500, "系统繁忙,请稍后再试");
    }
}
  • 异常冲突时的优先级,此冲突中,Exception异常不响应,DuplicateKeyExcption异常响应
  • 响应的状态码


  • case 流程控制函数

  • if 条件控制语句

相关推荐
程序员黑豆2 小时前
Java包装类:基本类型与对象的桥梁
java·前端·ai编程
mldong6 小时前
"applicant" 契约:退回发起人的闭环设计
java·架构
月华路6 小时前
G1 垃圾回收:脏卡队列、记忆集与并发精化线程机制
java·开发语言
gugucoding6 小时前
47. 【Java】Java内存模型(JMM)与可见性
java·开发语言
zww89491117 小时前
校园跑腿系统开发实战指南:从需求分析到上线部署全流程解析
java
Fluxart.ai7 小时前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化
名字还没想好☜8 小时前
Java 线上内存泄漏排查实战:jmap 导堆、MAT 找 GC Roots 与四类常见泄漏
java·开发语言·jvm·内存泄漏
IT爱学堂10 小时前
尚硅谷 - 2025年3月Java+AI大模型应用开发
java·开发语言·人工智能
小贤plus11 小时前
SpringBoot 三大核心注解精讲:@ControllerAdvice、@RestControllerAdvice、@Validated 分组校验(实战)
java
吠品11 小时前
Java byte数组与String互转:编码细节与踩坑记录
java·linux·服务器