发表于: 2020-06-06 22:56:58
1 1615
今天完成的事情:Validator校验器,messageSource国际化,并加在任务二代码中,添加put接口。
明天计划的事情:深度思考以及规划任务三。
遇到的问题:messageSource的资料很散,不知道怎么入手,现在初步了解了下,最后在W3Cshcool上找到还算完整的步骤。代码运行出了问题,还在解决,暂时提交不了。
收获:
Validator,校验器
1.判断表单数据是否符合要求,可以自己编写校验类,也可以使用hibernate-validator相关类
二者区别,请求参数校验,在校验规则较复杂,无法通过@NotNull 等简单校验方式时,可以利用此方式将校验与具体业务逻辑切割
处理表单数据的HTTP请求的过程
if (表单数据符合要求) {
处理数据,返回结果; }
else {
返回结果,提示用户重新输入数据; }
2.自定义检验类
public class StudentValidator implements Validator {
@Override
public boolean supports(Class<?> type) {
return Student.class.isAssignableFrom(type);
}
@Override
public void validate(Object o, Errors errors) {
Student student = (Student) o;
ValidationUtils.rejectIfEmptyOrWhitespace(errors,"number","number不能是汉字");
ValidationUtils.rejectIfEmptyOrWhitespace(errors,"name","name不能为空");
if(student.getTarget().length()<5){
errors.rejectValue("target","立志内容太短了");
}
}
}
3.hibernate-validator
https://www.cnblogs.com/lw5946/p/11574987.html
hibernate-validator 是 hibernate 组织下的一个开源项目 。
hibernate-validator 是 JSR 380(Bean Validation 2.0)、JSR 303(Bean Validation 1.0)规范的实现。
使用注解的方式:
@AssertFalse
检查元素是否为 false,支持数据类型:boolean、Boolean
@AssertTrue
检查元素是否为 true,支持数据类型:boolean、Boolean
@DecimalMax(value=, inclusive=)
inclusive:boolean,默认 true,表示是否包含,是否等于
value:当 inclusive=false 时,检查带注解的值是否小于指定的最大值。当 inclusive=true 检查该值是否小于或等于指定的最大值。参数值是根据 bigdecimal 字符串表示的最大值。
支持数据类型:BigDecimal、BigInteger、CharSequence、(byte、short、int、long 和其封装类)
@DecimalMin(value=, inclusive=)
支持数据类型:BigDecimal、BigInteger、CharSequence、(byte、short、int、long 和其封装类)
inclusive:boolean,默认 true,表示是否包含,是否等于
value:
当 inclusive=false 时,检查带注解的值是否大于指定的最大值。当 inclusive=true 检查该值是否大于或等于指定的最大值。参数值是根据 bigdecimal 字符串表示的最小值。
@Digits(integer=, fraction=)
检查值是否为最多包含 integer 位整数和 fraction 位小数的数字
支持的数据类型:
BigDecimal, BigInteger, CharSequence, byte, short, int, long 、原生类型的封装类、任何 Number 子类。
检查指定的字符序列是否为有效的电子邮件地址。可选参数 regexp 和 flags 允许指定电子邮件必须匹配的附加正则表达式(包括正则表达式标志)。
支持的数据类型:CharSequence
@Max(value=)
检查值是否小于或等于指定的最大值
支持的数据类型:
BigDecimal, BigInteger, byte, short, int, long, 原生类型的封装类, CharSequence 的任意子类(字符序列表示的数字), Number 的任意子类, javax.money.MonetaryAmount 的任意子类
@Min(value=)
检查值是否大于或等于指定的最大值
支持的数据类型:
BigDecimal, BigInteger, byte, short, int, long, 原生类型的封装类, CharSequence 的任意子类(字符序列表示的数字), Number 的任意子类, javax.money.MonetaryAmount 的任意子类
@NotBlank
检查字符序列是否为空,以及去空格后的长度是否大于 0。与 @NotEmpty 的不同之处在于,此约束只能应用于字符序列,并且忽略尾随空格。
支持数据类型:CharSequence
@NotNull
检查值是否不为 null
支持数据类型:任何类型
@NotEmpty
检查元素是否为 null 或 空
支持数据类型:CharSequence, Collection, Map, arrays
@Size(min=, max=)
检查元素个数是否在 min(含)和 max(含)之间
支持数据类型:CharSequence,Collection,Map, arrays
@Negative
检查元素是否严格为负数。零值被认为无效。
支持数据类型:
BigDecimal, BigInteger, byte, short, int, long, 原生类型的封装类, CharSequence 的任意子类(字符序列表示的数字), Number 的任意子类, javax.money.MonetaryAmount 的任意子类
@NegativeOrZero
检查元素是否为负或零。
支持数据类型:
BigDecimal, BigInteger, byte, short, int, long, 原生类型的封装类, CharSequence 的任意子类(字符序列表示的数字), Number 的任意子类, javax.money.MonetaryAmount 的任意子类
@Positive
检查元素是否严格为正。零值被视为无效。
支持数据类型:
BigDecimal, BigInteger, byte, short, int, long, 原生类型的封装类, CharSequence 的任意子类(字符序列表示的数字), Number 的任意子类, javax.money.MonetaryAmount 的任意子类
@PositiveOrZero
检查元素是否为正或零。
支持数据类型:
BigDecimal, BigInteger, byte, short, int, long, 原生类型的封装类, CharSequence 的任意子类(字符序列表示的数字), Number 的任意子类, javax.money.MonetaryAmount 的任意子类
@Null
检查值是否为 null
支持数据类型:任何类型
@Future
检查日期是否在未来
支持的数据类型:
java.util.Date, java.util.Calendar, java.time.Instant, java.time.LocalDate, java.time.LocalDateTime, java.time.LocalTime, java.time.MonthDay, java.time.OffsetDateTime, java.time.OffsetTime, java.time.Year, java.time.YearMonth, java.time.ZonedDateTime, java.time.chrono.HijrahDate, java.time.chrono.JapaneseDate, java.time.chrono.MinguoDate, java.time.chrono.ThaiBuddhistDate
如果 Joda Time API 在类路径中,ReadablePartial 和ReadableInstant 的任何实现类
@FutureOrPresent
检查日期是现在或将来
支持数据类型:同@Future
@Past
检查日期是否在过去
支持数据类型:同@Future
@PastOrPresent
检查日期是否在过去或现在
支持数据类型:同@Future
@Pattern(regex=, flags=)
根据给定的 flag 匹配,检查字符串是否与正则表达式 regex 匹配
支持数据类型:CharSequence
Spring messageSource国际化
https://www.jianshu.com/p/b6dad0c1bc20
<!--国际化的消息资源文件,该项目用于配置错误信息-->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<beans:list>
<!-- 在web环境中一定要定位到classpath 否则默认到当前web应用下找 -->
<value>classpath:messageSource.properties</value>
</beans:list>
</property>
<property name="useCodeAsDefaultMessage" value="true"/>
<property name="defaultEncoding" value="UTF-8"/>
<!--<property name="cacheSeconds" value="60"/>-->
</bean>
properties文件
user.number.empty=Invalid Number!Please enter number.
user.content=user content not null.
user.name=Name entered is invalid.
评论