参数校验注解@NotNull、@NotBlank、@NotEmpty

参数校验注解

简介

本文只对结论做说明,不深究过程

@NotNull 可以加在所有类型上,与@NotBlack或者 @NotEmpty配合有奇效
@NotBlank 只能用于字符串 用在其他类型上会报错
@NotEmpty 只用于字符串、集合、map,用于其他类型会报错
源码截图

探讨一下这三个注解加在字段上的作用
org.springmodules.validation.bean.conf.loader.annotation.handler
这三个注解都是来自于spring的注解
下面直接来验证

入参

public class TestSceneRequest {


    @NotNull
    private Integer id;

    @NotBlank
    private String name;


    @NotNull
    @NotBlank
    private String desc;


    @NotEmpty
    private List<String> list;

    @NotNull
    @NotEmpty
    private List<String> data;
 }

测试代码

测试代码如下,完整的测试通过使用的是junit测试
有一部分AOP代码没有贴出来,AOP代码作用注解生效后,如果参数不符合要求封装非法参数的返回值,设置result的success属性为false

@Test
    public void testNo(){
        TestSceneRequest request = new TestSceneRequest();
        // 测试@NutNull
        request.setName("erwe");
        request.setList(Arrays.asList("asd"));
        request.setData(Arrays.asList("asd"));
        request.setDesc("sadf");
        CommonResult result =  sceneConfigFacade.testNo(request);
        Assert.assertFalse(result.isSuccess());

        request.setId(0);
        result =  sceneConfigFacade.testNo(request);
        Assert.assertTrue(result.isSuccess());  // 使用NotNull后只要不是null就可以通过  

        request.setId(1);
        result =  sceneConfigFacade.testNo(request);
        Assert.assertTrue(result.isSuccess()); // 使用NotNull后只要不是null就可以通过  

        // 测试@NotBlack
        request.setName(null);
        result =  sceneConfigFacade.testNo(request);
        Assert.assertTrue(result.isSuccess());

        request.setName("   ");
        result =  sceneConfigFacade.testNo(request);
        Assert.assertTrue(result.isSuccess());

        request.setName("");
        result =  sceneConfigFacade.testNo(request);
        Assert.assertFalse(result.isSuccess());


        request.setName("dsf");
        result =  sceneConfigFacade.testNo(request);
        Assert.assertTrue(result.isSuccess());   // 单独使用NotBlack只要不是 “” 都可以检查通过

        // 测试@NotNull  @NotBlack 配合
        request.setDesc(null);
        result =  sceneConfigFacade.testNo(request);
        Assert.assertFalse(result.isSuccess());

        request.setDesc("   ");
        result =  sceneConfigFacade.testNo(request);
        Assert.assertTrue(result.isSuccess());

        request.setDesc("");
        result =  sceneConfigFacade.testNo(request);
        Assert.assertFalse(result.isSuccess());


        request.setDesc("dsf");
        result =  sceneConfigFacade.testNo(request);
        Assert.assertTrue(result.isSuccess()); // 使用@NotNull  @NotBlack 配合只要不是null 或 “” 其他都可以检查通过

        // 测试@NotEmpty 作用于集合
        request.setList(null);
        result =  sceneConfigFacade.testNo(request);
        Assert.assertTrue(result.isSuccess());

        request.setList(new ArrayList<>());
        result =  sceneConfigFacade.testNo(request);
        Assert.assertFalse(result.isSuccess());

        List<String> list = new ArrayList<>();
        list.add(null);
        request.setList(list);
        result =  sceneConfigFacade.testNo(request);
        Assert.assertTrue(result.isSuccess());

        request.setList(Arrays.asList(""));
        result =  sceneConfigFacade.testNo(request);
        Assert.assertTrue(result.isSuccess());


        request.setList(Arrays.asList("dfsd"));
        result =  sceneConfigFacade.testNo(request);
        Assert.assertTrue(result.isSuccess());  // 单独使用@NotEmpty 只要集合长度大于0,就可以通过,集合为null或者集合的元素为null的情况也不限制

        // 测试@NotNull @NotEmpty 配合作用于集合
        request.setData(null);
        result =  sceneConfigFacade.testNo(request);
        Assert.assertFalse(result.isSuccess());

        request.setData(new ArrayList<>());
        result =  sceneConfigFacade.testNo(request);
        Assert.assertFalse(result.isSuccess());

        request.setList(list);
        result =  sceneConfigFacade.testNo(request);
        Assert.assertFalse(result.isSuccess());

        // null在前
        list.add("");
        request.setList(list);
        result =  sceneConfigFacade.testNo(request);
        Assert.assertFalse(result.isSuccess());
        
        // null在后
        list.set(0, "");
        list.set(0, null);
        request.setList(list);
        result =  sceneConfigFacade.testNo(request);
        Assert.assertFalse(result.isSuccess());
        
        request.setData(Arrays.asList("dfsd"));
        result =  sceneConfigFacade.testNo(request);
        Assert.assertTrue(result.isSuccess());
        // 配合使用@NotNull @NotEmpty 集合本身为null、或者集合长度为0,或者集合的内部元素有空,都无法通过

    }

总结

注解使用范围作用
@NotNull使用在任何类型的字段字段不可以为null
@NotBlack只可以使用在String类型字段字段不可以为“”,可以为null
@NotEmpty只可以用在String、Collection、Map类型字段调用字段类型的isEmpty方法 对象不能是 null 并且相关对象的 size 大于 0
@NotNull与@NotBlack配合使用同@NotBlack字段不可以为null,也不可以为“”
@NotNull与@NotEmpty配合使用同@NotEmpty字段不可以为null,字段不可以为长度为0的集合,字段内集合内元素不可以为null

有问题留言
不定时回来看

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值