springboot2.0入门(六)-- ymal语法、数据校验

一、基本使用

1、ymal语法是一种更符合人类命名习惯的语法:

#    1. 一个家庭有爸爸、妈妈、孩子。
#    2. 这个家庭有一个名字(family-name)叫做“happy family”
#    3. 爸爸有名字(name)和年龄(age)两个属性
#    4. 妈妈有两个别名和年龄,妈妈的年龄和爸爸一样
#    5. 孩子除了名字(name)和年龄(age)两个属性,还有一个friends的集合
#    6. 每个friend有两个属性:hobby(爱好)和性别(sex)

family:
  family-name: happly family
  dad:
    name: levi
    age: 50   #${random.int}  随机数的值是不能传递的
  mom:
    alias:
      - yilisha
      - alise
    age: ${family.dad.age}   #妈妈的年龄和爸爸相同,没有则默认为24岁
  child:
    name: happlyboy
    age: 5
    friends:
      - {hobby: baseball,sex: male}
      - {hobby: football,sex: famale}

#数组的另一种表达方式:
#      - hobby: baseball
#        sex: male
#      - hobby:  football
#        sex: famale

 

测试该类的读取方式:

 

单个实体类:



@Data
public class Friend {
private String hobby;

private String name;

}


@Data
public class Mom {
private List<String> alias;
private int age;
}
@Data
public class Child {

    private  int age;

    private List<Friend> friends;

}

@Data
public class Dad {
    private String name;

    private  int age;

}

 

Family类

@Data
@Component
@ConfigurationProperties(prefix = "family")    //用于注入对象
public class Family {
    //@Value("${family.family-name}")      用于注入单个熟悉
    private String familyName;
    private Dad dad;
    private Mom mom;
    private Child child;

}

 

两种方式的区别:

创建测试类:

 

 

 测试类所在包名需要和代码包名一致,否则注入报错:

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestYml {

    @Autowired
    Family family;

    @Test
    public void hello(){

        System.out.println(family.toString());
    }
}

运行测试类结果:

 

 

 2、使用注意事项:

规则1:字符串的单引号与双引号

  • 双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思,如:
    ​ name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi

  • 单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据,如:
    ​ name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

规则2:支持松散的语法

family-name = familyName = family_name

随机数占位符

${random.value}
${random.int}
${random.long}
${random.int(10)}
${random.int[1024,65536]}

 

占位符获取之前配置的值,如果没有可以是用“冒号”指定默认值
格式例如,xxxxx.yyyy是属性层级及名称,如果该属性不存在,冒号后面填写默认值

${xxxxx.yyyy:默认值}

 

二、数据验证:

在需要校验的属性装配类上加@Validated注解,只有加上才会触发数据校验
@Validated注解的在此处的作用是配合@ConfigurationProperties进行属性校验:

 

具体使用例子:

@size (min=6, max=20, message="密码长度只能在6-20之间")
@pattern (regexp="[a-za-z0-9._%+-]+@[a-za-z0-9.-]+\.[a-za-z]{2,4}", message="请输入正确的邮件格式")
@Length(min = 5, max = 20, message = "用户名长度必须位于5到20之间")
@Email(message = "请输入正确的邮箱")
@NotNull(message = "用户名称不能为空")
@Max(value = 100, message = "年龄不能大于100岁")
@Min(value= 18 ,message= "必须年满18岁!" )
@AssertTrue(message = "bln4 must is true")
@AssertFalse(message = "blnf must is falase")
@DecimalMax(value="100",message="decim最大值是100")
@DecimalMin(value="100",message="decim最小值是100")
@NotNull(message = "身份证不能为空")
@Pattern(regexp="^(\d{18,18}|\d{15,15}|(\d{17,17}[x|X]))$", message="身份证格式错误")

 

 

 

 

 

 

 

 

 

 

 

 

 

 

@Data
public class Dad {
private String name;

private int age;

}
posted @ 2019-10-19 21:06  李维维(levi)  阅读(658)  评论(0编辑  收藏  举报