JSR303校验的基本使用和结合AOP使用

摘要:
当我们编写环绕通知的时候,目标方法出现的异常一定要抛出去。

[一]:基本使用

springboot默认导入第三方校验框架hibernate-validator

使用JSR303三大步骤

一.先给需要校验数据的javabean上标注校验注解

public class UmsAdminParam {
    @ApiModelProperty(value = "用户名", required = true)
    @Length(min = 6,max = 20,message = "用户名长度必须是6-18位")
    private String username;
    @ApiModelProperty(value = "密码", required = true)
    @NotEmpty(message = "密码不能为空")
    private String password;
    @ApiModelProperty(value = "用户头像")
    private String icon;
    @ApiModelProperty(value = "邮箱")
    @Email(message = "邮箱格式不合法")
    private String email;
    @ApiModelProperty(value = "用户昵称")
    private String nickName;
    @ApiModelProperty(value = "备注")
    private String note;
}

能使用的校验注解:

1.在hibernate-vaidator包下自带的注解:org.hibernate.validator.constraints下面所有注解

JSR303校验的基本使用和结合AOP使用第1张

2.JSR303钟规定的注解 :javax.validation.constraints下所有的注解

JSR303校验的基本使用和结合AOP使用第2张

二.告诉springboot,需要校验

在方法中加上@Valid注解

springmvc进入方法之前,确定参数值的时候就会校验,如果校验出错,直接返回错误不执行controller代码

JSR303校验的基本使用和结合AOP使用第3张

三.感知校验成功还是失败

在开启了校验javaBean参数后面,紧跟一个BindingResult对象,就可以获取到校验结果

只要有BindingResult,即使校验没通过,方法也会执行,我们需要手动处理。

JSR303校验的基本使用和结合AOP使用第4张

测试结果:

JSR303校验的基本使用和结合AOP使用第5张

[二]:结合AOP

使用了BindingResult参数后,需要在每个校验方法中手动处理,较为麻烦,故考虑可以使用AOP统一处理。

当我们编写环绕通知的时候,目标方法出现的异常一定要抛出去。

@Aspect
@Component
//使用环绕通知
public class DataValidAspect {

    @Around("execution(* com.wj.gmall.admin..*Controller.*(..))")
    public Object valid(ProceedingJoinPoint point){
        Object proceed = null;
        try {
            Object[] args = point.getArgs();
            for (Object arg : args) {
                if(arg instanceof BindingResult){
                    BindingResult result = (BindingResult)arg;
                    if(result.getErrorCount()>0){
                        //框架自动校验检测未通过
                        return new CommonResult().validateFailed(result);
                    }
                }
            }
            //调用目标方法
            proceed = point.proceed(args);
        } catch (Throwable throwable) {
            throwable.printStackTrace();
            throw new RuntimeException(throwable);
        }
        return proceed;
    }
}

免责声明:文章转载自《JSR303校验的基本使用和结合AOP使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇现代科技进步促使微积分学继续向前发展激活conda下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java编程:根据给定的日期,计算两个日期之间的时间差

计算两个Date之间的时间差,基本思路为把Date转换为ms(微秒),然后计算两个微秒时间差。 时间的兑换规则如下: 1s秒 = 1000ms毫秒 1min分种 = 60s秒 1hours小时 = 60min分钟 1day天 = 24hours小时   package com.qiyadeng.date; import java.text.SimpleDa...

Android蓝牙开发技术学习总结

Android开发,提供对蓝牙的通讯栈的支持,允许设别和其他的设备进行无线传输数据。应用程序层通过安卓API来调用蓝牙的相关功能,这些API使程序无线连接到蓝牙设备,并拥有P2P或者多端无线连接的特性。 蓝牙的功能: 1、扫描其他蓝牙设备 2、为可配对的蓝牙设备查询蓝牙适配器 3、建立RFCOMM通道(其实就是尼玛的认证) 4、通过服务搜索来链接其他的设备...

HashMap源码和并发异常问题分析

要点源码分析 HashMap允许键值对为null;HashTable则不允许,会报空指针异常; HashMap<String, String> map= new HashMap<>(2); map.put(null,null); map.put("1",null); Hash...

MP实战系列(十二)之封装方法详解(续二)

继续MP实战系列(十一)之封装方法详解(续一)这篇文章之后。 此次要讲的是关于查询。 查询是用的比较多的,查询很重要,好的查询,加上索引如鱼得水,不好的查询加再多索引也是无济于事。 1.selectById()方法 演示示例: UserEntity user = ud.selectById(33); System.out....

WinForm 自动完成控件

在Web的应用方面有js的插件实现自动完成(或叫智能提示)功能,但在WinForm窗体应用方面就没那么好了。 TextBox控件本身是提供了一个自动提示功能,只要用上这三个属性: AutoCompleteCustomSource:AutoCompleteSource 属性设置为CustomSource 时要使用的 StringCollection。 Aut...

jQuery之前端国际化jQuery.i18n.properties

jQuery.i18n.properties是一款轻量级的jQuery国际化插件,能实现Web前端的国际化。 国际化英文单词为:Internationalization,又称i18n,“i”为单词的第一个字母,“18”为“i”和“n”之间单词的个数,而“n”代表这个单词的最后一个字母。jQuery.i18n.properties采用.properties文...