zoukankan      html  css  js  c++  java
  • Spring Boot(15)——自动配置Validation

    自动配置Validation
    当应用中的Classpath下存在javax.validation的实现时,Spring Boot的org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration将会自动配置用于validate的LocalValidatorFactoryBean,前提是在用户没有自己定义javax.validation.Validator类型的bean的情况下,LocalValidatorFactoryBean也是实现了javax.validation.Validator接口的。此外,在缺少org.springframework.validation.beanvalidation.MethodValidationPostProcessor类型的bean的情况下还会自动配置一个org.springframework.validation.beanvalidation.MethodValidationPostProcessor类型的bean。它允许我们在bean的方法参数或方法上添加JSR303标准的Validation注解,从而在进行bean的方法调用时可以对方法参数或方法的返回值进行有效性验证。需要对bean的方法调用进行有效性校验需要在bean对应的Class上添加org.springframework.validation.annotation.Validated注解。假设应用中拥有如下这样一个bean定义,可以看到notNull方法的参数上添加了@NotNull,即不允许传递的参数为null;notBlank方法的参数上添加了@NotBlank,即不允许传递的参数为null或空字符串;returnPositive方法上添加了@Positive,即返回值只允许返回正数。

    @Service
    @Validated
    public class ValidationTestService {


    public void notNull(@NotNull Integer num) {

    }

    public void notBlank(@NotBlank String str) {

    }

    @Positive
    public int returnPositive(int num) {
    return num;
    }


    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    更多的JSR303注解的应用请参考对应的API文档。

    进行单元测试如下,你会发现testNotNull()将失败,而testNotNull2()将成功;testNotBlank()和testNotBlank1()将失败,而testNotBlank2()将成功;testReturnPositive()将成功,而testReturnPositive2()将失败。

    @SpringBootTest(classes=Application.class)
    @RunWith(SpringRunner.class)
    public class ValidationServiceTest {

    @Autowired
    private ValidationTestService validationTestService;

    @Test
    public void testNotNull() {
    Integer num = null;
    this.validationTestService.notNull(num);
    }

    @Test
    public void testNotNull2() {
    Integer num = 1;
    this.validationTestService.notNull(num);
    }

    @Test
    public void testNotBlank() {
    String str = null;
    this.validationTestService.notBlank(str);
    }

    @Test
    public void testNotBlank2() {
    String str = "";
    this.validationTestService.notBlank(str);
    }

    @Test
    public void testNotBlank3() {
    String str = "A";
    this.validationTestService.notBlank(str);
    }

    @Test
    public void testReturnPositive() {
    int num = 1;
    this.validationTestService.returnPositive(num);
    }

    @Test
    public void testReturnPositive2() {
    int num = -1;
    this.validationTestService.returnPositive(num);
    }

    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    (注:本文是基于Spring Boot 2.0.3所写)
    --------------------- 

  • 相关阅读:
    由1433端口入侵,浅谈sqlserver安全 (转)
    使用 Aircrack-ng 破解 WEP 和 WPA/WPA2 加密的 Wi-Fi 密码。(转)
    ZZmsvcprt.lib(MSVCP90.dll) : error LNK2005:已经在libcpmtd.lib(xmutex.obj) 中定义 .的分析解决办法 (转)
    提高D3js力导向图加载速度(转)
    Asp.Net实现FORM认证的一些使用技巧(转)
    Windows Server 2008 R2 备份和恢复 (转)
    搭建Go开发及调试环境(LiteIDE + GoClipse) -- Windows篇
    Beego源码分析(转)
    go语言实现一个简单的登录注册web小程序
    从无线安全到内网渗透(转)
  • 原文地址:https://www.cnblogs.com/hyhy904/p/10942229.html
Copyright © 2011-2022 走看看