spring 4.0 注解数据验证2

在spring 4.0 注解数据验证1中有基本的数据验证方法。还是那个POJO:

package com.suyin.pojo;

import java.lang.reflect.Field;

import org.hibernate.validator.constraints.NotBlank;

public class People {

    private int id;

    @NotBlank
    private String name;

    private String address;

    private int age;

    public final int getId() {
        return id;
    }

    public final void setId(int id) {
        this.id = id;
    }

    public final String getName() {
        return name;
    }

    public final void setName(String name) {
        this.name = name;
    }

    public final String getAddress() {
        return address;
    }

    public final void setAddress(String address) {
        this.address = address;
    }

    public final int getAge() {
        return age;
    }

    public final void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "People [id=" + id + ", name=" + name + ", address=" + address
                + ", age=" + age + "]";
    }

    public People set(String name, Object obj) {
        try {
            Field f = this.getClass().getDeclaredField(name);
            f.setAccessible(true);
            f.set(this, obj);
        } catch (NoSuchFieldException | SecurityException
                | IllegalArgumentException | IllegalAccessException e) {
            e.printStackTrace();
        }
        return this;
    }

}

有如下需求: 添加时要保证name不为空;修改时要保证name和address不为空。这怎么办?

spring4.0 提供了解决方案。先写两个标志接口 First和Second,类似于java.io.Serializable,如下:

package com.suyin.my.va;

public interface First {}

package com.suyin.my.va;

public interface Second {}

改造People如下:

package com.suyin.pojo;

import java.lang.reflect.Field;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;

import com.suyin.my.va.First;
import com.suyin.my.va.Second;

public class People {

    private int id;

    @NotBlank(groups= {First.class,Second.class})
    private String name;

    @NotBlank(groups= {Second.class})
    private String address;

    private int age;

    public final int getId() {
        return id;
    }

    public final void setId(int id) {
        this.id = id;
    }

    public final String getName() {
        return name;
    }

    public final void setName(String name) {
        this.name = name;
    }

    public final String getAddress() {
        return address;
    }

    public final void setAddress(String address) {
        this.address = address;
    }

    public final int getAge() {
        return age;
    }

    public final void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "People [id=" + id + ", name=" + name + ", address=" + address
                + ", age=" + age + "]";
    }

    public People set(String name, Object obj) {
        try {
            Field f = this.getClass().getDeclaredField(name);
            f.setAccessible(true);
            f.set(this, obj);
        } catch (NoSuchFieldException | SecurityException
                | IllegalArgumentException | IllegalAccessException e) {
            e.printStackTrace();
        }
        return this;
    }

}

在name上加了  @NotBlank(groups= {First.class,Second.class})

在address上加了 @NotBlank(groups= {Second.class})

可以猜测当遇到 First标志时会验证name,在遇到Second标志时会验证name和address。 那么现在只要告诉spring验证时使用First还是Second标志就可以了。

在Controller中有方法

    @RequestMapping(value="/add")
    public String add(@Validated(First.class) People p,BindingResult result, HttpServletRequest request) {
        if(result.hasErrors()) {
            System.out.println(result.getFieldErrors());
            return "error";
        }
        this.peopleService.add(p);
        return "people/detail";
    }    

    @RequestMapping("/update")
    public String update(@Validated(Second.class) People p,BindingResult result,HttpServletRequest request) {
        if(result.hasErrors()) {
            System.out.println(result.getFieldErrors());
            return "error";
        }
        this.peopleService.update(p);
        return "people/detail";
    }

在每个方法参数People p之前,把原来的@Valid改为了@Validated,并且分别加上了参数First.class和Second.class。

时间: 2024-12-26 18:52:10

spring 4.0 注解数据验证2的相关文章

spring 4.0 注解数据验证1

通常情况下,数据验证都分为前台验证,后台验证.并且前台JS验证是肯定有的,那么其实验证的错误信息根本不必通过后台传过去,哪怕就是想国际化,前台JS也能够胜任. 如果前台验证足够了,那么如果还有不正确的信息传到后台去,极有可能是通过非法手段.那么我对这些信息也不必客气,直接拒接就行了,连错误信息都不必发. 基于这个思想, 后台验证可以省掉很多东西. 我们现在使用Hibernate的那一套验证,必须引入Hibernate-validator的jar包.到Maven Repository 去找就行了.

[JAVA][Spring]Spring 3.0 注解注入详解

一.各种注解方式 [email protected]注解(不推荐使用,建议使用@Resource) @Autowired可以对成员变量.方法和构造函数进行标注,来完成自动装配的工作.@Autowired的标注位置不同,它们都会在Spring在初始化这个bean时,自动装配这个属性.要使@Autowired能够工作,还需要在配置文件中加入以下 Xml代码 <bean class="org.springframework.beans.factory.annotation.AutowiredAn

Spring 3.0 注解注入详解

一.各种注解方式 [email protected]注解(不推荐使用,建议使用@Resource) @Autowired可以对成员变量.方法和构造函数进行标注,来完成自动装配的工作.@Autowired的标注位置不同,它们都会在Spring在初始化这个bean时,自动装配这个属性.要使@Autowired能够工作,还需要在配置文件中加入以下 Xml代码 <bean class="org.springframework.beans.factory.annotation.AutowiredAn

POI 数据验证

从3.8开始,POI使用.xls和.xlsx格式处理数据校验略有不同之处.1)针对一个或多个预定义值检查用户输入到单元格的值以下代码将限制用户能输入到单元格A1的值是三个整数值(10.20.30)之一:    Workbook workbook = new XSSFWorkbook();  // 或者new HSSFWorkbook    Sheet sheet = workbook.createSheet("Data Validation");    // 数据验证帮助类    Da

spring(7)--注解式控制器的数据验证、类型转换及格式化

7.1.简介 在编写可视化界面项目时,我们通常需要对数据进行类型转换.验证及格式化. 一.在Spring3之前,我们使用如下架构进行类型转换.验证及格式化: 流程: ①:类型转换:首先调用PropertyEditor的setAsText(String),内部根据需要调用setValue(Object)方法进行设置转换后的值: ②:数据验证:需要显示调用Spring的Validator接口实现进行数据验证: ③:格式化显示:需要调用PropertyEditor的getText进行格式化显示. 使用

Spring MVC 数据验证——validate注解方式

1.说明 学习注解方式之前,应该先学习一下编码方式的spring注入.这样便于理解验证框架的工作原理.在出错的时候,也能更好的解决问题.所以本次博客教程也是基于编码方式,只是在原来的基础加上注解方式. 2.配置信息 web.xml不需要改变的 hello-servlet.xml将原来的加载方式,改为自动加入有hibernate和Spring提供的validate的默认类,配置如下: <?xml version="1.0" encoding="UTF-8"?&g

Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(四)

这一章大象将详细分析web层代码,以及使用Spring MVC的注解及其用法和其它相关知识来实现控制器功能.     之前在使用Struts2实现MVC的注解时,是借助struts2-convention这个插件,如今我们使用Spring自带的spring-webmvc组件来实现同样的功能,而且比之以前更简单.另外,还省掉了整合两个框架带来的不稳定因素.     对于Spring MVC框架,我主要讲一下它的常用注解,再结合一些示例进行说明,方便大家能够快速理解.     一.Spring MV

Spring MVC 数据验证——validate编码方式

1.导入jar包 validation-api-1.0.0.GA.jar这是比較关键的一个jar包,主要用于解析注解@Valid. hibernate-validator-4.3.2.Final.jar能够下载最新的.这个包在注解方式编码中尤为重要. 其它的就是一些日志包(不一定全不须要):jboss-logging-3.1.3.GA.jar.slf4j-log4j12-1.6.1.jar 2.web项目的结构图 项目的主要结构图,不清楚web项目的环境的能够自己学一下.推荐去慕课网上找视频看

ASP.NET MVC5(四):数据注解和验证

前言 用户输入验证的工作,不仅要在客户端浏览器中执行,还要在服务端执行.主要原因是客户端验证会对输入数据给出即时反馈,提高用户体验:服务器端验证,主要是因为不能完全信任用户提供的数据.ASP.NET MVC框架提供了强大的验证组件帮助我们处理这些繁杂的问题. 数据验证 验证注解的使用 验证注解特性定义在命名空间System.ComponentModel.DataAnnotations中,它们提供了服务器端验证的功能,当在模型的属性上使用时,框架也支持客户端验证.常用特性简介: Required当