springmvc使用JSR303 hibernate验证@valid及定制提示消息

                                        目录:

    一:添加jar包

    二:添加注解

    三:方法中添加@valied注解

    四:页面上显示错误消息

    五:国际化文件中错误消息的定制

    六:国际化资源文件的配置消息的配置

    七:JSR303支持的注解及Hibernate validate的扩展注解

    


一:首先需要加入两个jar包的依赖,我的项目是使用Maven构建,如果读者没有使用Maven构建项目自行下载jar包

<!--加入hibernate JSR 303 验证 -->
		<dependency>
			<groupId>org.hibernate.validator</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>${hibernate.version}</version>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator-annotation-processor</artifactId>
			<version>${hibernate.version}</version>
		</dependency>

二:在Bean的属性上加入验证的注解,红色的为验证注解(由于CSDN编辑器的问题,标注颜色的地方显示了HTML代码,读者自行判断),可以在注解的message属性中定制提示信息

package com.crud.bean;

import java.util.Date;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;

public class Employee {

	private Integer id;

	@NotBlank(message="用户名为空啦!")
	private String lastName;

	@Email(message="邮箱地址不合法")
	@NotBlank
	private String email;

	@Past
	@NotNull
	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date birth;

	@NumberFormat(pattern = "#,###.#")
	private Float salary;

	private int gerder;

	private Department department;
        //此处省略get、set方法
}

三:在Controller的方法的Bean前面加入@Valid注解,注意!如果要获取错误消息,注入的返回对象必须与Bean相邻,

注入的结果可是使用BindResult或者Errors,二者都可以获取错误结果,二者的方法也相同,可以查看BindingResult的源码,BindingResult实现了Errors接口,如图


@RequestMapping(value="/emp", method=RequestMethod.POST)
//	这里的验证bean与注入结果必须相邻,
//	注入的结果可是使用BindResult或者Errors,二者都可以获取错误结果,二者的方法也相同
//	public String save(@Valid Employee employee, Errors bindingResult) {
	public String save(@Valid Employee employee, BindingResult bindingResult, Map<String, Object> map) {
		if (bindingResult.getErrorCount() > 0) {
			List<FieldError> errorFields = bindingResult.getFieldErrors();
			errorFields.forEach(
					(errorField) -> System.out.println(errorField.getField() + "->" + errorField.getDefaultMessage()));
			System.out.println(employee);
			map.put("departments", departmentDao.getAllDepartment());
			return "input";
		}
		employeeDao.save(employee);
		return "redirect:/employee/emps";
	}
	

四:如果想要在页面上显示错误消息,可以使用springmvc的errors标签,其中path相同即可

使用  <form:input path="*" />  会一次显示所有的错误信息

<td><form:input path="lastName"/></td>
<td><form:errors path="lastName"/></td>

效果如图:


以下是实现错误消息的定制(也可以在注解的message属性中加提示信息,如二中所示):

资源文件的中的key为  注解名称.存储在与对象中的bean的名称.属性名

NotBlank.employee.lastName=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A.
Email.employee.email=\u4E0D\u5408\u6CD5\u7684\u90AE\u7BB1\u5730\u5740.
NotBlank.employee.email=\u90AE\u7BB1\u5730\u5740\u4E0D\u80FD\u4E3A\u7A7A.
Past.employee.birth=\u65F6\u95F4\u5FC5\u987B\u662F\u4E00\u4E2A\u8FC7\u53BB\u7684\u65F6\u95F4.
NotNull.employee.birth=\u751F\u65E5\u4E0D\u80FD\u4E3A\u7A7A.

如果使用了类型转换注解,如上面Employee中的DateTimeFormat注解,国际化资源文件key以typeMismatch开头

typeMismatch.employee.birth=\u751F\u65E5\u7C7B\u578B\u4E0D\u5339\u914D.
typeMismatch.employee.solary=\u5DE5\u8D44\u683C\u5F0F\u9519\u8BEF.

六:springmvc配置文件中的配置


	<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="basename" value="i18n"></property>
	</bean>

七:JSR303 支持的校验注解

  • @NotNull注解元素必须是非空

    @Null 

    注解元素必须是空
    @Digits 验证数字构成是否合法
    @Future   验证是否在当前系统时间之后
     @Past  验证是否在当前系统时间之前
    @Max  验证值是否小于等于最大指定整数值
    @Min    验证值是否大于等于最小指定整数值
    @Pattern 验证字符串是否匹配指定的正则表达式
    @Pattern  验证字符串是否匹配指定的正则表达式
     @Size 验证元素大小是否在指定范围内
    @DecimalMax验证值是否小于等于最大指定小数值
    @DecimalMin验证值是否大于等于最小指定小数值
     @AssertTrue 被注释的元素必须为true
     @AssertFalse 被注释的元素必须为false
    以下是Hibernate validate 进的扩展验证注解
  • @Email被注释的元素必须是电子邮箱地址
    @Length 被注释的字符串的大小必须在指定的范围内
    @NotEmpty 被注释的字符串的必须非空
    @Range 被注释的元素必须在合适的范围内



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值