空指针治理 设计模式

分层领域模型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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值