文档章节

springmvc - validation

lemos
 lemos
发布于 2016/11/19 16:53
字数 610
阅读 24
收藏 0

校验理解

一般是在前端使用js进行校验。而使用服务器端的校验,一般对安全性要求较高。

服务端校验

控制层:校验页面参数的合法性。这种校验不区分客户端的类型(浏览器,手机客户端、远程调用)

业务层:主要关键业务参数,仅仅限于service接口中的参数。

持久层:一般不进行校验。

#springmvc 校验

springmvc 使用hibernate 的校验框架validation (和 hibernate 没有任何关系)

校验思路

页面提交的参数,请求到controller方法中,使用validation进行校验校验,如果出错,将错误信息回显到页面上。

##具体需求 商品修改,添加校验,如果出错,在修改页面显示错误信息。

##jar 包

在maven中搜索hibernate-validator-4.3.0就ok,它会自动帮你下载其jar包,及相关依赖包。 hibernate-validator 的相关jar包

##代码实现

一、配置校验器 springmvc- servlet.xml中配置

<!-- 校验器 -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactor
    <!-- hibernate校验器-->
    <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
    <!-- 指定校验使用的资源文件,在文件中配置校验错误信息,如果不指定则默认使用classpath下的ValidationMessages.properties -->
    <property name="validationMessageSource" ref="messageSource" />
</bean>
<!-- 校验错误信息配置文件 -->
<bean id="messageSource"
      class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <!-- 资源文件名-->
    <property name="basenames">
        <list>
            <value>CustomValidationMessages</value>
        </list>
    </property>
    <!-- 资源文件编码格式 -->
    <property name="fileEncodings" value="utf-8" />
    <!-- 对资源文件内容缓存时间,单位秒 -->
    <property name="cacheSeconds" value="120" />
</bean>

二、校验器配置到处理器适配器中 springmvc-serlvet.xml中配置

<mvc:annotation-driven conversion-service="conversionService"
validator="validator"/>

三、在po类中x配置校验

@Size(min = 1,max = 20,message = "{items.name.length.error}")
private String name;

@NotNull(message = "{items.createtime.isNull}")
private Date createtime;

四、创建 CustomValidationMessages.properties

#添加错误的校验信息提示
items.name.length.error= 请输入1到20个字符
items.createtime.isNull= 请输入商品的生产日期

五、捕获错误校验信息

//商品信息修改提交
@RequestMapping(value=("/editItemsSubmit"),method = {RequestMethod.GET,RequestMethod.POST})
public String editItemsSubmit(Model model, HttpServletRequest request, Integer id,
                              @Validated ItemsCustom itemsCustom, BindingResult bindingResult)throws Exception {
    if (bindingResult.hasErrors()) {
        List<ObjectError> allErrors = bindingResult.getAllErrors();
        for (ObjectError allError : allErrors) {
            System.out.println(allError.getDefaultMessage());
        }
        model.addAttribute("allErrors", allErrors);
        return "items/editItems";
    }
    ...
}

注意:

处理器方法必须给定包含Errors的参数,这可以是Errors本身,也可以是它的子类BindingResult。

而且这个参数是必须紧挨着@Valid参数的,即必须紧挨着需要校验的参数,这就意味着我们有多少个@Valid参数就需要有多少个对应的Errors参数,它们是一一对应的。

© 著作权归作者所有

共有 人打赏支持
lemos
粉丝 8
博文 184
码字总数 92482
作品 0
芜湖
后端工程师
私信 提问
让Spring Controller 的方法基本数据类型参数支持Bean Validation

让Spring Controller 的方法基本数据类型参数支持Bean Validation Spring中的Bean Validation 我们知道Spring MVC层是默认可以支持Bean Validation的,尝试使用了一下感觉很不方便,只支持对...

ForEleven
2014/04/18
0
32
Spring 3 MVC and JSR303 @Valid example

In Spring 3, you can enable “mvc:annotation-driven” to support JSR303 bean validation via annotation, if any JSR 303 validator framework on the classpath. Note Hibernate Vali......

凯文加内特
2015/10/10
116
0
bean的属性校验

拓展阅读: Java如何实现判断一个对象的所有属性是否为空 springMVC介绍之spring validation Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC(系列) 7. Validation, Data Bin...

pandudu
2016/12/27
3
0
spring mvc 采用 jsr303 bean validation 校验框架

这是一个规范,定义了一些元素来进行bean的数据校验,比如 你的model有一个 user.java ,里面有一个email,当用户注册时候要验证email是否合法。 一般做法是js前端校验,但是不安全,作为完整...

moz1q1
2014/10/31
0
0
Spring Validation实现原理分析

最近要做动态数据的提交处理,即需要分析提交数据字段定义信息后才能明确对应的具体字段类型,进而做数据类型转换和字段有效性校验,然后做业务处理后提交数据库,自己开发一套校验逻辑的话周...

68号小喇叭
2018/07/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JavaScript继承(二)——借用构造函数

JavaScript继承(一)——原型链中提出原型链继承的两个问题:一是原型的数据共享问题,二是创建子类型的实例时,不能向父类型的构造函数中传递参数。这两个问题的根源还是在于使用原型模式创...

Bob2100
22分钟前
0
0
day25:比较两个文件内容|杀进程|并发备份数据库|并发进程备份mysql库|监控全国CDN网站节点|

1、有两个文件 a.txt 和 b.txt,把 a.txt 中有的但 b.txt 中没有的行找出来,并写入列 c.txt,然后计算 c 的行数; 注释:比较两个文件两个文件不同,可以用的方法:diff md5sum grep -vf $1 $...

芬野de博客
38分钟前
3
0
抓包工具Charles

背景介绍 Charles是一款很实用,界面很友好(至少跟fiddler比起来),功能强大的抓包神器,因为它是基于 java 开发的,所以跨平台,Mac、Linux、Windows下都是可以使用的,并且在Android和i...

Jack088
39分钟前
0
0
徒手撸一个简单的RPC框架

徒手撸一个简单的RPC框架 之前在牛逼哄哄的 RPC 框架,底层到底什么原理得知了RPC(远程过程调用)简单来说就是调用远程的服务就像调用本地方法一样,其中用到的知识有序列化和反序列化、动态...

不学无数的程序员
今天
2
0
Java 面试题目最全集合1000+ 大放送,能答对70%就去BATJTMD试试~

2019,相对往年我们会发现今年猎头电话少了,大部分企业年终奖缩水,加薪幅度也不如往年,选择好offer就要趁早,现在开始准备吧,刷一波Java面试题,能回答70%就去BATJTMD大胆试试~ 以下是2...

mikechen优知
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部