Mingyang.net:用注解校验数据

注解校验依赖的是javax.validation和hibernate-validaton。

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.0.1.Final</version>
</dependency>

激活Spring的注解驱动:

<mvc:annotation-driven />

定义数据模型:

public class Subscriber {

    @Size(min=2, max=30)
    private String name;

    @NotEmpty @Email
    private String email;

    @NotNull @Min(13) @Max(110)
    private Integer age;

    @Size(min=10)
    private String phone;

    @NotNull
    private Gender gender;

    @DateTimeFormat(pattern="MM/dd/yyyy")
    @NotNull @Past
    private Date birthday;

    ...
}

在控制器中用@Valid定义数据模型:

@Controller
public class FormController {

    ...

    @RequestMapping(value="form", method=RequestMethod.POST)
    public String submitForm(@Valid Subscriber subscriber, BindingResult result, Model m) {
        if(result.hasErrors()) {
            return "formPage";
        }

        m.addAttribute("message", "Successfully saved person: " + subscriber.toString());
        return "formPage";
    }
}

在视图中用<form:errors>显示错误信息:

<form:form action="/form" modelattribute="subscriber">
    <label for="nameInput">Name: </label>
    <form:input path="name" id="nameInput"></form:input>
    <form:errors path="name" cssclass="error"></form:errors>
    <br />

    <label for="ageInput">Age: </label>
    <form:input path="age" id="ageInput"></form:input>
    <form:errors path="age" cssclass="error"></form:errors>
    <br />

    <label for="phoneInput">Phone: </label>
    <form:input path="phone" id="phoneInput"></form:input>
    <form:errors path="phone" cssclass="error"></form:errors>
    <br />

    <label for="emailInput">Email: </label>
    <form:input path="email" id="emailInput"></form:input>
    <form:errors path="email" cssclass="error"></form:errors>
    <br />

    <label for="birthdayInput">Birthday: </label>
    <form:input path="birthday" id="birthdayInput" placeholder="MM/DD/YYYY">
    <form:errors path="birthday" cssclass="error"></form:errors>
    <br />

    <label for="genderOptions">Gender: </label>
    <form:select path="gender" id="genderOptions">
        <form:option value="">Select Gender</form:option>
        <form:option value="MALE">Male</form:option>
        <form:option value="FEMALE">Female</form:option>
    </form:select>
    <form:errors path="gender" cssclass="error"></form:errors>
    <br />

    <label for="newsletterCheckbox">Newsletter? </label>
    <form:checkbox path="receiveNewsletter" id="newsletterCheckbox"></form:checkbox>
    <form:errors path="receiveNewsletter" cssclass="error"></form:errors>
    <br /><br />
    <input type="submit" value="Submit" />
</form:input></form:form>

如何定义校验信息?最简单的方式是用message参数:

@Size(min=10, message="Phone number must be at least 10 characters")

但是这不能实现国际化文字处理。用messageSource可以实现国际化文字:

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

然后在src/main/resources下建立messages.properties,用下面的格式覆盖默认的校验信息:

{ValidationClass}.{modelObjectName}.{field}

例如:

Size=the {0} field must be between {2} and {1} characters long
Size.subscriber.name=Name must be between {2} and {1} characters
Size.subscriber.phone=Phone must be at least {2} characters

Min.subscriber.age=You must be older than {1}
Max.subscriber.age= Sorry, you have to be younger than {1}

Email=Email address not valid
Past=Date must be in the past

NotEmpty=Field cannot be left blank
NotNull=Field cannot be left blank

typeMismatch=Invalid format
methodInvocation.myRequest.amount=Invalid format

注意下面这段话,说明了搜索校验信息的顺序:

For example, if the age field of our “subscriber” model object fails the “NotNull” validation, the “NotNull.subscriber.age” message would be looked up. If the message isn’t found, “NotNull.subscriber” would be looked for. Finally, if not found, “NotNull” message would be looked for. If that also isn’t found, the default message (what we saw above) would be rendered. 

http://codetutr.com/2013/05/28/spring-mvc-form-validation/

Mingyang.net:用注解校验数据

时间: 2024-10-12 17:08:12

Mingyang.net:用注解校验数据的相关文章

struts2 校验数据的有效性 2种方式

Struts2的数据校验: 数据的校验分为客户端校验和服务器端两种: 客户端校验:JS完成的校验.(为了提升用户体验.减少用户的输入错误) 服务器端校验:在后台的校验.(必须的.) 手动编码进行校验: 1.编写一个Action,这个Action必须继承ActionSupport. 2.重写validate方法:---针对Action中的所有方法进行校验. @Override // Struts2提供的数据校验的方法: public void validate() { if(username ==

Struts2 校验数据问题

我们会经常遇到一下问题,例如我在前端输入数据,把数据发送到和后台,我首先要校验这个数据, 比如说:前端必须输入一个日期类型的数据,后端才能正确接收,要是输入一个不是日期型的数据, 那么后端就要把数据打回去,并且提示或者跳转到错误页面.那么怎么去校验呢? f废话不多说,直接添代码,最直观的方法. 前端代码: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%&

在ASP中用“正则表达式对象”来校验数据的合法性

我们在制作网站的时候,尤其是各种电子商务网站,首先都会让用户填写一些表格来获取注册用户的各种信息,因为用户有可能输入各式各样的信息,而有些不符合要求的数据会给我们的后端ASP处理程序带来不必要的麻烦,甚至导致网站出现一些安全问题.因此我们在将这些信息保存到网站的数据库之前,要对这些用户所输入的信息进行数据的合法性校验,以便后面的程序可以安全顺利的执行.所以我们一般会在后端编写一个ASP的校验程序来分析用户输入的数据是否是合法的. 或许有人会问了,使用运行在客户端的JavaScript不是可以更好

Mingyang.net:注解配置Hibernate时报错Unknown Entity

注解配置时报错:org.hibernate.MappingException: Unknown entity: net.mingyang.cms.bean.User org.hibernate.MappingException: Unknown entity: net.mingyang.cms.bean.User at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1096

springboot~为Money类型添加最大值和最小值的注解校验

在spring框架里,为我们集成了很多校验注解,直接在字段上添加对应的注解即可,这些注解基本都是简单保留类型的,即int,long,float,double,String等,而如果你自己封装了新的类,那么如果要校验它,注解这块需要自己写一下,像money这个类型,如果希望对它进行校验,注解这块需要自己去写. 普通类型的注解校验 /** * 编号. */ @NotBlank(message = "部门编号不能为空.") private String code; /** * 名称. */

自己写的基于java Annotation(注解)的数据校验框架

JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方便和重用,自己写了一个简单的基于Annotation的校验框架.有兴趣的可以扩展. 框架说明: AnnotationValidable接口:所有需要使用该校验框架的类都要实现它,该类中没有任何方法需要实现,仅仅是一个表明那些类需要使用该校验框架的标识. GetFiledValue类:是一个工具类,对

Java自定义注解反射校验数据

package com.annotations.ecargo; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUN

struts2学习笔记--使用Validator校验数据

我们在进行一些操作是需要对用户的输入数据进行验证,比如网站的注册,需要对各个数据项进行数据校验,Struts2提供了一些默认的校验器,比如数字的检测,邮箱的检测,字符串长度的检测等等. 常用的Validator 校验器 作用  required  必填校验器,要求字段必须有值  requiredstring 必填字符串校验器,要求必须有值且长度大于0,即不能是空字符串.默认会去掉字符串前后空格 参数fieldName:该参数指定校验的字段名称,如果是字段校验,则不用指定该参数 参数trim:该参

使用注解校验参数

一:为什么使用注解 在项目开发中,参数的校验是不可避免的,通常情况下,我们会使用if条件判断,如果 前台传递很多参数过来,那么需要写很多累赘的if代码来校验参数,而使用注解可以避免 这个问题,注解需要依赖javaBean,在字段上我们可以绑定一些元数据,然后在校验的 使用使用,下面是一个简单的实例: 自定义注解:NotNull package com.annotation; import java.lang.annotation.Documented; import java.lang.anno