分层领域模型pojo DO数据库对象 BO业务对象 VO显示层对象
参数校验
时间参数@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
StringUtils.isNotEmpty 不为null且不等于"" 可以为空字符串
@NotBlank(message ="")只能作用在接收的 String 类型上,注意是只能,不能为 null,而且调用 trim() 后,长度必须大于 0即:必须有实际字符
@NotEmpty不能为 null,且长度必须大于 0,一般用在集合类上或者数组上
@NotNull不能为 null,但可以为 empty,一般用在 Integer 类型的基本数据类型的非空校验上,而且被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制
@NotBlank 等注解时,一定要和 @valid(能够用在成员属性(字段)上) @Validated(可以用在类型)一起使用,否则 @NotBlank 不起作用。
本身都不支持嵌套校验 只有在属性上加@valid支持!!!
get入参 使用需要在类上加@Validated
@Valid和BindingResult配套使用,@Valid用在参数前,BindingResult作为校验结果绑定返回 result.getFieldError().getDefaultMessage();
Optional get获取值
of() 和 ofNullable() 方法创建包含值的 Optional。两个方法的不同之处在于如果你把 null 值作为参数传递进去,of() 方法会抛出 NullPointerException:
ifPresent() 检查是否有值 并且可以改变值 orElse() orElseGet()返回默认值 非空值,两个方法都会返回对应的非空值。不过,orElse() 方法仍然创建了 User 对象
orElseThrow() 为空的时候抛出异常
map() 对值应用(调用)作为参数的函数,然后将返回的值包装在 Optional 中 flatMap不会使用Optional包装Function执行的返回结果!!! 链式调用中!!
filter() 接受一个 Predicate 参数,返回测试结果为 true 的值。如果测试结果为 false,会返回一个空的 Optional!!!
public static String getStudentName(School school){
return Optional.ofNullable(school)
.flatMap(School::getTearch)
.flatMap(Tearch::getStudent) 方法返回本身就是Option不需要map返回在加一层option
.map(Student::getName).orElse("false");
}
时map和flatMap的用法就清楚,如果某对象实例的属性本身就为Optional包装过的类型,那么就要使用flatMap方法,就像School::getTearch返回的就是Optional<Tearch>类型的,所以不用再使用Optional进行包装,这时就要选用flatMap方法,对于返回值是其他类型,需要Optional进行包装,如Student::getName得到是String类型的,就需要使用map方法在其外面包装一层Optional对象
return Optional.ofNullable(user).map(u -> u.getFirstName()).orElse("Unkown");
流的常用创建方法Collection Arrays
流的中间操作
筛选与切片 filter limit条数 skip跳过 distinct去重
映射 map flatMap 排序sorted 消费peek修改值
流的终止操作 findFirst().get() count .max(Integer::compareTo).get() .collect(Collectors.toList())也可为map forEach toArray
流水线操作 每个中间操作节点都定义了自己对应的 Sink!!终止操作节点出现时才开始将 Sink 实例化并串起来
过滤器 拦截器 aop可以前后验证!!!
自定义注解 @interface; 结合aop验证
主要有@Target可用在哪些地方,@Retention生命周期,@Document,@Inherited所标记的类的子类也会拥有这个注解
@Around("@annotation(org.springframework.web.bind.annotation.GetMapping)")在请求加切面
反射获取到filed class
clazz.isAnnotationPresent(Info.class) clazz.getAnnotation(Info.class); 先判断在得到对象上的
Validation annotation = field.getAnnotation(Validation.class);
然后从注解属性值判断验证返回结果 通过就joinPoint.proceed(joinPoint.getArgs()放行 没通过就bad
空指针治理 设计模式
最新推荐文章于 2023-09-13 13:58:18 发布