SpringMVC的数据验证和JSR 303国际化显示(十一)中

简介: SpringMVC的数据验证和JSR 303国际化显示(十一)中

三. JSR 303 验证。


JSR 303 的验证,主要是通过 注解的方式,在Bean 的属性上面进行添加注解,进行验证,直接作用在 Java Bean 上面,又叫做 Bean Validation .


官方参考的是Hibernate Validation. 所以,重点学习 Hibernate的验证, 而不是Apache 的验证。


需要导入相应的包:


微信图片_20211228223831.png


三.一 JSR 303 验证注解


JSR 303 的注解,在 validation-api-1.1.0.Final.jar 包里面。 javax.validation.constraints


注解 功能 范例
@Null 验证对象为 null @Null
private String description;
@NotNull 验证不为空,只验证基本数据,
不能验证长度为0的字符串
@NotNull
private Integer age;
@AssertTrue 验证为 true @AssertTrue
private boolean isMarriage;
@AssertFalse 验证为false @AssertFalse
private String isMarriage;
@Max(value) 整数数字类型的,最大值为value @Max(120)
private Integer age;
@Min(value) 整数数字类型的,最小值为value @Min(18)
private Integer age;
@DecimalMax(value) 浮点型,最大值,value为字符串形式 @DecimalMax(value=“100.00”)
private double score;
@DecimalMin(value) 浮点型,最小值,value为字符串形式 @DecimalMin(value=“100.00”)
private double score;
@Digits(integer,fraction) 浮点型是否符合格式,integer为整数,
fraction为小数
@Digits(integer=3,fraction=2)
private double score;
@Size(min,max) 数组,List,Map,Set,String,的最大值和最小值 @Size(min=2,max=10)
private List hobbys;
@Past 日期 Date 或者是日历 Calendar 对象
是否在当前时间 now 之前
@Past
private Date birthday;
@Future 日期 Date 或者是日历 Calendar 对象
是否在当前时间 now 之后
@Future
private Date invalid;
@Pattern 正则表达式验证,用regexp来表达式 @Pattern(regexp=“1[0~9]{10}”)
private String phone;


三.二 Hibernate 扩展的验证注解


Hibernate 除了支持 上面 的JSR 303的注解之外,还添加了一些新的注解。


在 hibernate-validator-5.2.4.Final.jar 包里面。 org.hibernate.validator.constraints


注解 功能 范例
@NotBlank 不为空,长度不能为0. 只能是字符串
会将字符串先trim()去除左右空格
@URL 合法的url @URL
private String mainUrl;
@Email 合法的Email 地址 @Email
private String email;
@CreditCardNumber 合法的信用卡号 @CreditCardNumber
private String card;
@Length(min,max) 字符串的长度在 min与max的范围之内 @Length(min=6,max=15)
private String password;
@NotEmpty 判断是否为空或者是Empty, 用于Array,Map,Collection,String @NotEmpty
private String name;
@Range(min,max,message) 数字的范围,min为最小值,max为最大值
message为提示信息
@Range(min=18,max=100,message=“年龄需要在18~100之间”)
private Integer age;


四. JSR 303 验证数据


四.一 引入jar包


微信图片_20211228225415.png


四.二 在User.java 的各个属性上添加不同的约束注解


public class User implements Serializable{
  private static final long serialVersionUID = 1L;
  private Integer id;
  @NotBlank(message="用户名不能为空12341")
  @Length(max=10,message="用户名不能超过10个字")
    private String name;
  @NotBlank(message="密码不能为空")
  @Length(min=6,max=15,message="密码长度应在6~15之间")
    private String password;
    @Range(min=18,max=100,message="年龄需要在18~100之间")
    private Integer age;
    @NotBlank(message="描述不能为空")
    private String description;
    @DecimalMin(value="0.00",message="成绩的最小值为0")
    @DecimalMax(value="100.00",message="成绩的最大值不能超过100")
    @NumberFormat(pattern="###,##")
    private double score;
    //定义一个日期类
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @Past(message="填写的出生日期必须要在当前日期之前")
    private Date birthday;
    @Pattern(regexp="1[3456789]\\d{9}",message="请输入正确的电话号码")
    private String phone;
    @Email
    private String email;
 // 后面,就是setter和getter方法了。
}


四.三 springmvc.xml 的配置文件,将hibernate进行配置


<mvc:annotation-driven validator="validator"></mvc:annotation-driven>
  <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
    <!-- hibernate校验器 -->
    <property name="providerClass" value="org.hibernate.validator.HibernateValidator"></property>
  </bean>


四.四 后端,Action 进行处理


@Controller
@RequestMapping(value="/user")
public class UserAction {
  //转到登录的页面
  @RequestMapping(value="toLogin")
  public String toLogin(Model model){
    model.addAttribute("user",new User());
    return "user/login";
  }
  //绑定到user对象。
  @RequestMapping(value="login") 
  public String login(@Validated User user,
      BindingResult bindingResult,Model model){
    model.addAttribute("user",user);
    if(bindingResult.hasErrors()){ //有错的话,就返回登录页面。
      return "user/login";
    }
    return "user/list";
  }
}


四.五 前端显示代码


<body>
  <h2>两个蝴蝶飞,数据验证使用</h2>
  <form:form commandName="user" action="login.action"  method="post">
    <form:label path="name">姓名:</form:label>
    <form:input path="name"/>
    <form:errors path="name"></form:errors> <br/>
    <form:label path="password">密码:</form:label>
    <form:input path="password"/> <!--为了能看见值,这里用 form:input,而不是form:password -->
    <form:errors path="password"></form:errors> <br/>
    <form:label path="age">年龄:</form:label>
    <form:input path="age"/>
    <form:errors path="age"></form:errors> <br/>
    <form:label path="description">描述:</form:label>
    <form:input path="description"/>
    <form:errors path="description"></form:errors> <br/>
    <form:label path="score">成绩:</form:label>
    <form:input path="score"/>
    <form:errors path="score"></form:errors> <br/>
    <form:label path="birthday">出生日期:</form:label>
    <form:input path="birthday"/>
    <form:errors path="birthday"></form:errors> <br/>
    <form:label path="phone">联系方式:</form:label>
    <form:input path="phone"/>
    <form:errors path="phone"></form:errors> <br/>
    <form:label path="email">邮箱:</form:label>
    <form:input path="email"/>
    <form:errors path="email"></form:errors> <br/>
    <form:button>提交</form:button>
  </form:form>
</body>


四.六 重启服务器,进行验证


情况组合太多,老蝴蝶在这里只简单列举几个。


微信图片_20211228225644.png


微信图片_20211228225705.png


微信图片_20211228225724.png


JSR 303验证是正确的,可以进行验证。

相关文章
|
11月前
|
XML 前端开发 Java
SpringMVC中资源国际化使用实践
SpringMVC中资源国际化使用实践
118 0
|
缓存 前端开发 Java
【SpringMVC】JSR 303与拦截器注解使用
【SpringMVC】JSR 303与拦截器注解使用
73 0
|
Java
SpringMVC-国际化
SpringMVC-国际化
57 0
|
监控 前端开发 Java
学习 [Spring MVC] 的JSR 303和拦截器,提高开发效率
学习 [Spring MVC] 的JSR 303和拦截器,提高开发效率
52 0
|
Java Spring
springmvc-国际化&中英文切换&文件上传&下载
springmvc-国际化&中英文切换&文件上传&下载
|
前端开发 Java 数据库连接
【SpringMVC】JSR 303与interceptor拦截器快速入门
JSR 303是Java规范请求(Java Specification Request)的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。 JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现 . Hibe
|
编解码 前端开发 Java
springMVC--数据验证以及国际化
springMVC--数据验证以及国际化
126 0
|
前端开发 Java 应用服务中间件
Spring MVC-08循序渐进之国际化(基于Session-SessionLocaleResolver)
Spring MVC-08循序渐进之国际化(基于Session-SessionLocaleResolver)
67 0
|
前端开发 IDE Java
Spring MVC-08循序渐进之国际化(AcceptHeaderLocaleResolver)
Spring MVC-08循序渐进之国际化(AcceptHeaderLocaleResolver)
159 0
|
Java 数据库连接 API
Spring MVC-07循序渐进之验证器 下 (JSR 303验证)
Spring MVC-07循序渐进之验证器 下 (JSR 303验证)
81 0