Springboot配置文件: application.yml   application.properties(自带)

yml的格式写起来稍微舒服一点

在application.properties中数据是下面的样子:

#IDEA的 properties配置文件是utf-8编码的
#配置实体类Person字段
person.lastame=张三
person.age=18
person.birth=2018/11/12
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.petname=佩奇
person.dog.petage=2

如果跑测试出错,说明在IDEA的settings中file encoding没有设置为utf-8

在bean中:

package com.example.demo11.bean;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated; import javax.validation.constraints.Email;
import java.util.Date;
import java.util.List;
import java.util.Map; /**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person"; 配置文件中哪个下面的所有属性进行一一映射
*
* 只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能;
*/ @Data
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties(prefix = "person")
@Validated //配合ConfigurationProperties注解进行JSR303数据校验
@Component
public class Person { /**
* <bean class="Person">
* <property name="lastName" value="字面量/${key}从环境变量,配置文件中获取值/#{SpEL}"></property>
* </bean>
*/ //必须为邮箱格式,该校验必须在@ConfigurationProperties与@Validated在的情况下使用
@Email
private String email;
// @Value("${person.lastame}")
private String lastame;
// @Value("#{11*2}")
private Integer age;
// @Value("true")
private boolean boss;
// @Value("${person.birth}")
private Date birth; private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
}

@Value的方式也能对应properties中的对应的值.但其只是对应单个数据比较有效,例如写一个controller,获取姓名:

controller: (这时候的bean中不使用@ConfigurationProperties和@Validated 而使用lastname)

@Value("${person.lastame}")
private String lastame;
package com.example.demo11.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class HelloController { @Value("${person.lastame}")
private String name; @RequestMapping("/sayHello")
public String sayHello(){
return "Hello , " + name;
}
}

运行主程序,(非测试) 查看路径可以获取到bean中person的lastname属性值.

还挺方便.

>

|

>

简单说下SpringBoot的测试类:

package com.example.demo11;

import com.example.demo11.bean.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class)
@SpringBootTest
public class Demo11ApplicationTests { @Autowired
private Person person;
@Test
public void contextLoads() {
System.out.println(person);
} }
SpringBoot 测试类,(单元测试)
注解 @SpringBootTest 说明这个类是一个SpringBoot的测试类,
@RunWith(SpringRunner.class) 说明是用Spring的驱动器来跑,而不是用原来的Junit
可以在测试期间很方便地类似编码一样进行自动注入等容器的功能.
 
如果不使用@ConfigurationProperties 也可以使用@Value注解
但@ConfigurationProperties这种支持数据名称松散绑定,而@Value必须对应
 
 
配置文件yml还是properties都能获取到值.
如果说,只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value
如果说,我们专门编写一个javaBean来和配置文件进行映射,
我们就直接使用@ConfigurationProperties
特殊情况下可以@ConfigurationProperties和@Value结合使用.
 
 
 
两种数据获取的注解区别:

SpEL : Spring表达式语言 ...
自定义数据校验注解: https://www.cnblogs.com/niceyoo/p/9497235.html
自定义数据校验:
 
 
||||
 
自定义数据校验:
 
 
 
注意,使用建立class的方式,将class改为@interface  
详见 https://www.ibm.com/developerworks/cn/java/j-lo-jsr303/ 创建一个包含验证逻辑的简单应用(基于 JSP)下面的 >> 定制化的 constraint
IDValidator : (Annotation)
package com.example.demo11.validator.annotation;

import com.example.demo11.validator.IDConstraintValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*; @Documented
@Constraint(validatedBy = {IDConstraintValidator.class})
@Target({ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IDValidator { //提示信息
String message() default "身份证号长度需要在15或18位,并全为阿拉伯数字."; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};
}
IDConstraintValidator:(定义一个类用来处理具体的验证逻辑)
package com.example.demo11.validator;

import com.example.demo11.validator.annotation.IDValidator;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext; public class IDConstraintValidator implements ConstraintValidator<IDValidator,String> { @Override
public void initialize(IDValidator constraintAnnotation) { } @Override
public boolean isValid(String id, ConstraintValidatorContext constraintValidatorContext) {
int length = id.length();
//验证id全为数字,长度为15位或18位.(现在估计全是18位了?)
if ((id.matches("^[0-9]*$")) && (length == 15 || length == 18)){
//验证成功
return true;
}
//否则不予通过
return false;
}
}

之后在bean中加入属性:

@IDValidator
private String idnumber;
这个属性说明这是一个CN身份证号码,上面的验证逻辑也说明了这一点: (这样是不准确的,因为身份证中还可能含有字母X,x)
身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
所以经过更改后:
IDConstraintValidator:
package com.example.demo11.validator;

import com.example.demo11.validator.annotation.IDValidator;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext; public class IDConstraintValidator implements ConstraintValidator<IDValidator,String> { @Override
public void initialize(IDValidator constraintAnnotation) { } @Override
public boolean isValid(String id, ConstraintValidatorContext constraintValidatorContext) {
int length = id.length();
//直接使用身份证号码的正则表达式:
//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X,x
//15位或18位的正则表达式为:
//^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$
//下面的是18位的身份证验证:
if(id.matches("^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$")){
return true;
}
//否则不予通过
return false;
}
}

同样提示message也更改为:  注解 - IDValidator 中:

//提示信息
String message() default "非正确的身份证格式.";
||||
 
 
部分的数据校验注解:
JSR303上面的链接中还说明了使用自定义的验证注解.
下面的图表名了注解的有效性,但必须配合@ConfigurationProperties和@Validated
 
 
 

[SpringBoot] - 配置文件的多种形式及JSR303数据校验的更多相关文章

  1. springboot配置(yami配置文件,JSR303数据校验,多环境配置)

    yami配置文件 YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写.在开发的这种语言时,YAML 的意思其实是:&q ...

  2. Springboot:JSR303数据校验(五)

    @Validated //开启JSR303数据校验注解 校验规则如下: [一]空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @No ...

  3. YAML语法使用,JSR303数据校验

    YAML YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写 # yaml配置 server: prot: YAML语 ...

  4. SpringBoot 之 JSR303 数据校验

    使用示例: @Component @ConfigurationProperties(prefix = "person") @Validated //使用数据校验注解 public ...

  5. SpringMVC框架07——服务器端JSR303数据校验

    1.数据校验概述 数据校验分为客户端校验和服务器端校验,客户端主要是通过过滤正常用户的误操作,是第一道防线,一般使用JavaScript代码实现.但是只有客户端校验是不够的,攻击者可以绕过客户端验证直 ...

  6. springMVC使用JSR303数据校验

    JSR303注解 hibernate validate是jsr 303的一个参考实现,除支持所有的标准校验注解外,他还支持扩展注解 spring4.0拥有自己独立的数据校验框架,同时支持jsr 303 ...

  7. SpringBoot 2 快速整合 | Hibernate Validator 数据校验

    概述 在开发RESTFull API 和普通的表单提交都需要对用户提交的数据进行校验,例如:用户姓名不能为空,年龄必须大于0 等等.这里我们主要说的是后台的校验,在 SpringBoot 中我们可以通 ...

  8. JSR303数据校验

    Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理. 导入依赖: <dependency> <groupId>org ...

  9. JSR-303 数据校验学习

    一.JSR-303简介JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator. 此实现与 Hibernate ...

随机推荐

  1. 【Android N 7.1.1】 屏幕亮和灭的处理地方

    frameworks/base/services/core/java/com/android/server/display/DisplayPowerController.java private vo ...

  2. 混合开发中ios兼容问题

    1. z-index无效,设置层级,发现再ios中无效,后来发现是设置了 -webkit-overflow-scrolling:touch 设置这个属性之后.层级设置失效 2.@keyup事件的问题, ...

  3. Yii2框架添加API Modules

    原文链接:http://www.itnose.net/detail/6459353.html : 一.环境部署 1. read fucking Yii Documents. http://www.yi ...

  4. MVC视图布局页常用代码

    1.在视图 Views 中新建文件夹  Shared 2.在 Shared 中新建布局页-母版页   _Layout.cshtml @{ Layout = null; } <!DOCTYPE h ...

  5. opencv学习笔记——颜色空间转换函数cv::cvtColor详解

    cv::cvtColor()用于将图像从一个颜色空间转换到另一个颜色空间的转换(目前常见的颜色空间均支持),并且在转换的过程中能够保证数据的类型不变,即转换后的图像的数据类型和位深与源图像一致. 具体 ...

  6. mysql中sql注入的随笔

    当使用如下登录代码时:就会引发sql注入问题 怎么注入呢? 'or 1=1 # 就可以了. 为什么呢? 首先or:在sql中是或者,只要满足前一个或后一个条件即可,只要所以不论你是 'or 1=1 # ...

  7. JAVA参数没有引用传递,只有值传递

    原文章地址:http://www.cnblogs.com/clara/archive/2011/09/17/2179493.html 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性, ...

  8. mysql 数据操作 单表查询 通过四则运算查询

    #通过四则运算查询 FROM employee; AS Annual_salary FROM employee; Annual_salary FROM employee; 查看年薪salary*12 ...

  9. ssh 配置文件讲解大全 ssh调试模式 sftp scp strace进行调试 特权分离

    ssh 配置文件讲解大全  ssh调试模式  sftp scp strace进行调试  特权分离 http://blog.chinaunix.net/uid-16728139-id-3265394.h ...

  10. git-【九】基本常用命令

    mkdir:         XX (创建一个空目录 XX指目录名) pwd:          显示当前目录的路径. git init          把当前的目录变成可以管理的git仓库,生成隐 ...