异常处理
1.编程式
2.申明式 @ExceptionHandler仅能负责本类的异常
再加上@ControllerAdvice可以集中处理所有异常
获取异常信息,精确优先
全局异常处理器,不需要额外写@Compent
如果返回是json,类上添加@Response
组合起来就是@RestControllerAdvice
最佳实践,我们编写全局异常处理器,处理所有异常
异常处理的最终方式
后端只编写正确的业务逻辑,如果出现业务问题,后端通过抛异常的方式提前中断业务逻辑,让前端感知异常:
定义一个业务异常类:
异常处理最终方式:
1.必须有业务异常类,BizExceprion // 自己写的异常类
2.有异常枚举类,BizExceptionEnume,列举项目中每个模块会出现的异常类情况
3.编写业务代码的时候,只需要编写正确逻辑,如果出现预期的问题,需要以抛异常的方式中断逻辑并通知上层
4.全局异常处理器,GlobalExceptionHandler,处理所有异常,返回给前端
数据校验JSR303
数据的合法性校验
导入依赖
添加注解
使用@Valid 告诉SpringMVC 进行校验
为了获取校验出来的错误,需要在参数后面增加BindingResult
使用全局异常替代
特性字段的校验,比如性别
正则
自定义注解
写一个校验器
添加校验器
创建国际化
创建文件
中文会出现乱码的情况,解决乱码
可以创建多个messages.properties文件
英文状态下的
针对不同场景,还可以使用分组校验@Validated
但是分组校验不要用,不符合设计模式: 单一职责
如果校验通过,就需要进行转换
利用属性对拷
上面代码还可以优化,用stream流