(十)springMvc 校验
目录
springMvc 校验 准备
sprngMvc
使用 hinernate
的校验框架 validation
;
导入 validation
框架需要的包 ;
hibernate-validation 、jboss-logging、validation-api ;
踩坑
还是有 版本 的问题,hibernate-validation
的版本不要太高,使用几年前的版本,不要使用新的版本,否则会提示 unsupported major.minor version 52.0
的错误,这错误是告诉我们要使用 JDK1.8
,我的是 JDK1.7
;
但是当你把 hibernate-validation
的版本降低以后,你会发现可能还会报错,报错 java.lang.ClassNotFoundException: com.fasterxml.classmate.Fileter
,反正是缺少 classmate
这个包,再去把这个包,加进来,至此,我的工程没有再报错 ;
搞了一下午,时间全花在这种鸡毛蒜皮的事上了 !!还是回去考南大软院吧,摆脱这种无聊的工作 ;----------- 2018年9月19日17:09:07
配置校验器
在 springMvcxml
中进行配置校验器 ;
<!--配置校验器-->
<bean class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<!--配置检验器 使用 hibernate 的校验器 -->
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<!--指定校验使用的配置文件,如果不指定,则默认读取 classPath : validationMessage.properties-->
<property name="validationMessageSource" ref="messageSource"/>
</bean>
<!--配置校验错误信息-->
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<!--配置资源文件名-->
<property name="basenames">
<list>
<!--配上错误信息文件地址-->
<value>validation.CustomerValidationMessage</value>
</list>
</property>
<!--资源文件编码格式-->
<property name="fileEncodings" value="UTF-8"/>
<!--对资源文件的缓存时间,单位为 秒-->
<property name="cacheMillis" value="120"/>
</bean>
如果上面的错误校验器,不能读取错误配置信息的内容,就换成下面的:
<!-- 校验错误信息配置文件 -->
<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<!-- 资源文件名 -->
<property name="basenames">
<list>
<value>validation.CustomValidationMessage</value>
</list>
</property>
<!-- 资源文件编码格式 -->
<property name="defaultEncoding" value="utf-8"/>
<!-- 对资源文件内容缓存时间,单位秒 -->
<property name="cacheSeconds" value="120"/>
</bean>
将校验器注入到适配器中
发现许多和 handler
有关的东西,都是注入到适配器中的,比如之前的 自定义参数绑定 ;在标签 <mvc:annotation-driven
中定义 ;
<!--使用注解的映射器、适配器-->
<mvc:annotation-driven validator="validatorFactoryBean"/>
在 pojo 中配置校验规则
使用注解,注意看清注解的包,都是 validation
包下面的注解,不要导错包!
不要在 message
里面进行错误提示信息的硬编码,将错误提示信息写到之前配置的检验错误文件中 ,进行引用;
/**
* 校验字段的长度,message里面写上错误提示信息,这里引用错误提示文件的内容,而非直接硬编码
*/
@Size(min = 1,max = 7,message = "{Item.name }")
private String name;
/**
* 检验时间,不可为空
*/
@NotNull(message = "{Item.ctrateTime}}" )
private Date ctrateTime;
在 controller 层进行检验
在 handler
的需要检验的形参前面加注解 @Validated
;在需要校验的形参后面添加一个参数 BindingResult
用于接受校验错误信息 ;
BindingResult
和 @Validated
是成对使用的,也就是有对个形参需要检验的时候,就写读个 BindingResult
和 @Validated
;并且 BindingResult
和 @Validated
的顺序也是固定的 ;
获取错误信息
// 判断是否有错误信息
if (bindingResult.hasErrors()) {
// 获取所有错误信息
List<ObjectError> list = bindingResult.getAllErrors();
// 打印错误信息
for (ObjectError objectError : list) {
System.out.println(objectError.getDefaultMessage());
}
}
将错误信息传到视图中
在形参中添加一个 model
,将错误信息封装到其中 ;
@RequestMapping(value = "/updateItem", method = {RequestMethod.POST})
public String updateItem(Model model , @Valid Item item, BindingResult bindingResult) throws Exception {
// 判断是否有错误信息
if (bindingResult.hasErrors()) {
// 获取所有错误信息
List<ObjectError> list = bindingResult.getAllErrors();
model.addAttribute("errorList",list) ;
// 跳准到 编辑 页面
return "Item/ItemUpdate";
}
// 调用 services 层方法
itemsServices.updateItem(item);
return "success";
}
分组检验
我们将检验规则,以注解的形式写在了 pojo
上,但是当我们多个方法需要对参数进行检验的时候,并且这些方法并不是每个方法都需要对所有的规则进行校验,这时候我们需要进行分组校验 ;
分组也就是定义一个接口,但是接口中不需要我们做任何事,只是一个空接口,起到分门别类的作用 ;
我们在 pojo
的检验规则上,添加分组,然后在handler
方法的形参的注解 @Validated
上添加分组value=xxxx.class'
来使用具体的分组校验 ;
@Size(min = 1,max = 7,message = "{Item.name}",groups = {ItemName.class})
private String name;
@RequestMapping(value = "/updateItem", method = {RequestMethod.POST})
public String updateItem(Model model , @Validated(value = {ItemName.class}) Item item, BindingResult bindingResult) throws Exception {
'''''''
}
信息回显
springMvc 默认对
pojo
对象数据进行回显 ;当
pojo
对象传进controller
方法中时候,springMvc
会自动的将其添加到request
域中,key
就是pojo
对象类型(首字母小写) ;@ModelAttribute(“xxx”)
使用注解,相当于可以随意的更改
key
的值 ;在需要回显的
controller
形参前面,加上这个注解 ,它在request
域中的key
就是注解中的内容 ;@ModelAttribute("xxx")
也可以将方法的返回值,传到页面 ,只需要将该注解,注解到方法上,不需要为其配置requestMapping
,也就是说该方法不能通过url
访问到,但是只要到页面上写上key
值,就可以访问到;
(十)springMvc 校验的更多相关文章
- springMVC学习(7)-springMVC校验
一.校验理解: 对于安全要求较高点建议在服务端进行校验. 控制层conroller:校验页面请求的参数的合法性.在服务端控制层conroller校验,不区分客户端类型(浏览器.手机客户端.远程调用) ...
- 如何在SSM项目配置springMVC校验框架validator
1.在springMVC配置文件配置添加如下信息 <!-- 表单验证框架 --> <bean id="validator" class="org.spr ...
- springMVC校验器(validator)
springmvc使用的是Hibernate Validator(和Hibernate的ORM无关)来完成校验功能 一.普通校验 1.导入jar包 2.编写校验错误配置文件 3.配置校验错误信息文件 ...
- springMVC 校验时,CustomValidationMessages.properties中的错误提示信息的中文乱码 问题
今天在学习springmvc的校验时,遇到了CustomValidationMessages.properties配置文件的信息,才错误提示时是乱码的问题:在网上找了很多方法都没解决:最后原来是在配置 ...
- springmvc 校验---spring校验
springmvc提供了灵活的可拓展的校验方式,根据不同的项目可选择适合的校验方式,首先介绍下springmvc中内置的校验实现方式! 1.实现 org.springframework.validat ...
- springMVC:校验框架:多规则校验,嵌套校验,分组校验;ssm整合技术
知识点梳理 课堂讲义 学习目标 能够阐述表单验证的分类和区别 能够运用表单验证的常用注解 能够编写表单验证的示例 能够编写SSM整合的应用案例 能够总结SSM整合的步骤 1 校验框架 1.1 入门-视 ...
- (转)SpringMVC学习(十)——SpringMVC与前台的json数据交互
http://blog.csdn.net/yerenyuan_pku/article/details/72514022 json数据格式在接口调用中.html页面中比较常用,json格式比较简单,解析 ...
- springmvc 校验--JSR
1.使用JSR规范是简单使用的,如果使用hibernate校验则需要在工程中添加hibernate-validate.jar,以及其他依赖的jar包. 2,在mvc配置文件中使用<mvc:ann ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——S ...
随机推荐
- 校庆神秘建筑(HDU 1411)
Problem 杭州电子科技大学即将迎来50周年的校庆,作为校庆委员会成员的我被上级要求设计一座神秘的建筑物来迎合校庆,因此我苦思冥想了一个月,终于设计出了一套方案,这座建筑物有点象古老埃及的金字塔, ...
- intle官方手册下载
如题:https://software.intel.com/en-us/articles/intel-sdm#three-volume 方便哪些不会怎么搜索的同学吧. 链接: https://pan. ...
- 走进JavaWeb技术世界1:Web后端与J2EE的由来
转自:微信公众号 码农翻身 这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求 ...
- .net core 修改 Identity/AspNetUsers 数据库
众所周知,.net core有一套完整的用户管理功能.使用它就能实现用户的管理及登录登出功能.现在问题来了,我们有时候需要添加一些字段,该怎么办呢?当然是修改他呀.修改方法参考链接:https://m ...
- 第11组 Alpha冲刺(6/6)
第11组 Alpha冲刺(6/6) 队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/11913626.html 作业博客 https://edu ...
- arcgis python 参数验证
import arcpy class ToolValidator(object): """Class for validating a tool's parameter ...
- [.NET] ConfuserEx脱壳工具打包
[.NET] ConfuserEx脱壳工具打包 ConfuserEx 1.0.0脱壳步骤 Written by 今夕何夕[W.B.L.E. TeAm] 1.先用UnconfuserEx把 ...
- 【Java】利用java.io.PrintWriter写出文本文件
代码: package com.hy.expired; import java.io.FileNotFoundException; import java.io.PrintWriter; public ...
- c语言 nmealib-0.5.3 学习 简单代码 ,供参考
void showInfo1(char *buf) { ];// ="$GPGGA,031105.000,4003.9196,N,11620.5765,E,1,05,3.4,109.0,M, ...
- 05-06 Flutter JSON和序列化反序列化、创建模型类转换Json数据、轮播图数据渲染:Flutter创建商品数据模型 、请求Api接口渲染热门商品 推荐商品
Config.dart class Config{ static String domain='http://jd.itying.com/'; } FocusModel.dart class Focu ...