Spring整合注解随笔16

40 阅读2分钟

异常处理

1.编程式

image.png

2.申明式 @ExceptionHandler仅能负责本类的异常

再加上@ControllerAdvice可以集中处理所有异常

image.png

image.png

image.png

获取异常信息,精确优先

image.png

全局异常处理器,不需要额外写@Compent

image.png

如果返回是json,类上添加@Response

组合起来就是@RestControllerAdvice

image.png

image.png

image.png

最佳实践,我们编写全局异常处理器,处理所有异常

异常处理的最终方式

后端只编写正确的业务逻辑,如果出现业务问题,后端通过抛异常的方式提前中断业务逻辑,让前端感知异常:

定义一个业务异常类:

image.png

image.png

异常处理最终方式:

1.必须有业务异常类,BizExceprion // 自己写的异常类

2.有异常枚举类,BizExceptionEnume,列举项目中每个模块会出现的异常类情况

3.编写业务代码的时候,只需要编写正确逻辑,如果出现预期的问题,需要以抛异常的方式中断逻辑并通知上层

4.全局异常处理器,GlobalExceptionHandler,处理所有异常,返回给前端

image.png

image.png

image.png

image.png

数据校验JSR303

数据的合法性校验

image.png

导入依赖

image.png

添加注解

image.png

使用@Valid 告诉SpringMVC 进行校验

image.png

为了获取校验出来的错误,需要在参数后面增加BindingResult

image.png

image.png

image.png

image.png

使用全局异常替代

image.png

image.png

image.png

特性字段的校验,比如性别

正则

image.png

自定义注解

image.png

image.png

写一个校验器

image.png

image.png

添加校验器

image.png

image.png

image.png

创建国际化

创建文件

image.png

image.png

中文会出现乱码的情况,解决乱码

image.png

image.png

可以创建多个messages.properties文件

image.png

image.png

英文状态下的

image.png

image.png

针对不同场景,还可以使用分组校验@Validated

但是分组校验不要用,不符合设计模式: 单一职责

image.png

image.png

image.png

如果校验通过,就需要进行转换

利用属性对拷

image.png

image.png

image.png

image.png

上面代码还可以优化,用stream流

image.png

--github.com/krahets/Lee…