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

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在的情况下使用
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);
} }

注意,使用建立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;
身份证号码为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 "非正确的身份证格式.";


[SpringBoot] - 配置文件的多种形式及JSR303数据校验的更多相关文章
- springboot配置(yami配置文件,JSR303数据校验,多环境配置)
yami配置文件 YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写.在开发的这种语言时,YAML 的意思其实是:&q ...
- Springboot:JSR303数据校验(五)
@Validated //开启JSR303数据校验注解 校验规则如下: [一]空检查 @Null 验证对象是否为null @NotNull 验证对象是否不为null, 无法查检长度为0的字符串 @No ...
- YAML语法使用,JSR303数据校验
YAML YAML是 "YAML Ain't a Markup Language" (YAML不是一种置标语言)的递归缩写 # yaml配置 server: prot: YAML语 ...
- SpringBoot 之 JSR303 数据校验
使用示例: @Component @ConfigurationProperties(prefix = "person") @Validated //使用数据校验注解 public ...
- SpringMVC框架07——服务器端JSR303数据校验
1.数据校验概述 数据校验分为客户端校验和服务器端校验,客户端主要是通过过滤正常用户的误操作,是第一道防线,一般使用JavaScript代码实现.但是只有客户端校验是不够的,攻击者可以绕过客户端验证直 ...
- springMVC使用JSR303数据校验
JSR303注解 hibernate validate是jsr 303的一个参考实现,除支持所有的标准校验注解外,他还支持扩展注解 spring4.0拥有自己独立的数据校验框架,同时支持jsr 303 ...
- SpringBoot 2 快速整合 | Hibernate Validator 数据校验
概述 在开发RESTFull API 和普通的表单提交都需要对用户提交的数据进行校验,例如:用户姓名不能为空,年龄必须大于0 等等.这里我们主要说的是后台的校验,在 SpringBoot 中我们可以通 ...
- JSR303数据校验
Springboot中可以用@validated来校验数据,如果数据异常则会统一抛出异常,方便异常中心统一处理. 导入依赖: <dependency> <groupId>org ...
- JSR-303 数据校验学习
一.JSR-303简介JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator. 此实现与 Hibernate ...
随机推荐
- hdu 5318 The Goddess Of The Moon
The Goddess Of The Moon Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- chrom调试
2.Event Listeners 可以看到事件找到对应在标签点开里有useCapture, passive: once: handler等等右键handler 的"show functio ...
- 【BZOJ1801】[Ahoi2009]chess 中国象棋 DP
[BZOJ1801][Ahoi2009]chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮 ...
- Thrift入门之mac下的安装流程
新建一个maven项目,先下载maven依赖 http://thrift.apache.org/download <dependency> <groupId>org.apac ...
- Java 泛型 详解
一.什么是泛型 本质而言,泛型指的是参数化的类型.参数化的类型的重要性是:它能让你创建类.接口和方法,由它们操作的数据类型被指定为一个参数.操作参数化类型的类.接口或方法被称为泛型,如泛型类或泛型方法 ...
- HDU 1104 Remainder(BFS 同余定理)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1104 在做这道题目一定要对同余定理有足够的了解,所以对这道题目对同余定理进行总结 首先要明白计算机里的 ...
- Rancher OS
Rancher OS 是生产规模中运行 Docker 最小,最简单的方式.RancherOS 的所有东西都作为 Docker 管理的容器.这些系统服务包括 udev 和 rsyslog.Rancher ...
- Python开发【Django】:基础
Django基本配置 Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Se ...
- 10.Git远程仓库
到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了.可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了,没看出Git ...
- Elasticsearch入门教程
ElasticSearch是一个高度可扩展的开源搜索引擎并使用REST API,所以您值得拥有. 在本教程中,将介绍开始使用ElasticSearch的一些主要概念. 下载并运行ElasticSear ...
