SpringMVC数据校验

一、数据校验

数据校验只做前端校验是不安全的,需要在重要的数据的加上后端校验。我们可以写一段程序将每一个数据取出并进行校验,除此之外SpringMVC可以使用JSR303来做数据校验。

JSR303是Java为Bean数据合法性校验提供的标准框架,它可以通过在Bean属性上标注注解来指定校验规则,并通过标准的验证接口对Bean进行验证。

Employee类的属性添加校验注解

public class Employee {

	private Integer id;

	@NotEmpty
	@Length(min = 6, max = 18)
	private String lastName;

	@Email
	private String email;


	//1 male, 0 female
	private Integer gender;
	
	private Integer departmentId;

	@Past	//校验必须是一个过去的时间
	//@Future	//必须是一个未来的时间
	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date birth;

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

使用@Valid在SpringMVC封装对象的时候,告诉SpringMVC这个JavaBean需要校验。还需要给校验的JavaBean后面紧跟一个BindingResult,这个BindingResult就是封装前一个bean的校验结果。然后可以根据不同的校验结果决定如何操作

    @RequestMapping(value = "/emp",method = RequestMethod.POST)
    public String addEmp(@Valid Employee employee, BindingResult result){
        System.out.println("要添加的员工信息:" + employee);
        boolean hasErrors = result.hasErrors();
        if (hasErrors){
            System.out.println("有校验错误!");
            
            return "add";
        }else {
            employeeService.save(employee);

            return "redirect:/emps";
        }

    }

二、请求域中存放校验信息

    @RequestMapping(value = "/emp",method = RequestMethod.POST)
    public String addEmp(@Valid Employee employee, BindingResult result, Model model){
        System.out.println("要添加的员工信息:" + employee);
        boolean hasErrors = result.hasErrors();
        Map<String, Object> errorsMap = new HashMap<String,Object>();
        if (hasErrors){
            System.out.println("有校验错误!");

            //获取所有字段的错误信息
            List<FieldError> fieldErrors = result.getFieldErrors();
            for (FieldError fieldError : fieldErrors){
                System.out.println("错误的消息提示:" + fieldError.getDefaultMessage());
                System.out.println("错误的字段是:" + fieldError.getField());
                System.out.println(fieldError);
                System.out.println("--------------------------------------");
                errorsMap.put(fieldError.getField(),fieldError.getDefaultMessage());
            }

            model.addAttribute("errorsInfo",errorsMap);

            return "add";
        }else {
            employeeService.save(employee);

            return "redirect:/emps";
        }

    }

在页面取出请求域中保存的错误信息

${errorsInfo.lastName}

三、自定义国际化错误消息的显示

每一个字段发生错误以后,都会有自己的错误代码,国际化配置文件中错误信息的key必须对应一个错误代码codes

例如邮箱校验出错:

codes
	[
		Email.employee.email,	//校验规则.隐含模型中这个对象的key.对象的属性
		Email.email,			//校验规则.属性名
		Email.java.lang.String	//校验规则.属性类型
		Email					//校验规则
	]
  • 如果是隐含模型中employee对象的email属性字段发生了@Email校验错误,就会生成Email.employee.email
  • 所有的email属性只要发生了@Email错误,就会生成Eamil.email
  • 只要是String类型发生了@Email错误,就会生成Email.java.String
  • 只要发生了@Email校验错误,就会生成Email

编写国际化配置文件

errors_zh_CN.properties

Eamil.email = 邮箱格式错误!
NotEmpty = 不能为空!
Length.java.lang.String = 长度有误!
Past=必须是过去的时间!

errors_en_US.properties

Eamil.email = email incorrect!
NotEmpty = must not empty!
Length.java.lang.String = length incorrect!
Past=must a past time !

让SpringMVC管理国际化配置文件

    <!--管理国际化配置文件-->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basename" value="errors"></property>
        <!--配置文件使用UTF-8编码,否则页面会显示中文乱码-->
        <property name="defaultEncoding" value="UTF-8"></property>
    </bean>

还可以直接使用message指定错误消息

	@NotEmpty(message = "不能为空!")
	@Length(min = 6, max = 18)
	private String lastName;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值