Spring MVC:Trgger手动验证表单对象

有时可能需要在Spring MVC @Controller中使用手动验证 使用Spring的org.springframework.validation.ValidationUtils类非常简单。 了解如何在两种不同的情况下调用验证器。

方案1 –调用验证

在这种情况下,我有一个带有用户名字段的用户表单。 用户名字段使用自定义验证器进行验证,以验证例如数据库中的存在。

public class User {@UserExistsprivate String username;}

在控制器类中,我有一个处理该对象的POST方法的方法:

@Autowired
private org.springframework.validation.Validator validator;@RequestMapping(value = "/user", method = RequestMethod.POST)
public String validate(@ModelAttribute User user, Errors errors) {ValidationUtils.invokeValidator(validator, user, errors);if (errors.hasErrors()) {// error, show errors to the user}// success, form is valid!
}

org.springframework.validation.ValidationUtils是用于调用org.springframework.validation.Validator的类。

请注意,用户参数后面是org.springframework.validation.Errors对象。 Spring初始化了这个对象,但是它是空的,可以传递给invokeValidator方法。

方案2 –通过提示调用验证

在这种情况下,用户表单变得更加复杂:

@GroupSequence(value = {ValidationOrder.First.class, ValidationOrder.Second.class})
interface ValidationOrder {interface First {}interface Second {}
}public class User {@UserExists(groups = ValidationOrder.First.class)@UserIsEntitledToDiscount(groups = ValidationOrder.Second.class)private String username;}

感谢@GroupSequence我可以决定验证顺序。 要触发验证,我需要将其他参数传递给invokeValidator方法,以便正确使用组:

ValidationUtils.invokeValidator(validator, user, errors, ValidationOrder.class);

源代码

源代码包含所有这三种方法,因此您可以快速比较它们: https : //github.com/kolorobot/spring-mvc-beanvalidation11-demo

翻译自: https://www.javacodegeeks.com/2016/04/spring-mvc-trgger-manual-validation-form-object.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tez什么意思_传统数仓和大数据数仓的区别是什么?

概念与容器为什么先说这个,其实很简单:因为绝大多数人都把这两个概念混为一谈。然后就会出现各种各样的问题:oracle不是数据库么,怎么又是数据仓库?Hive不是数据仓库么?怎么又是数据库?数据仓库…

Ajax4Jsf 简单介绍

Ajax4jsf 允许开发人员将 Ajax 功能添加到 JSF 应用程序中,而不需要 JavaScript 或用 Ajax 图形部件替换现有的组件。这个包还允许在使用 Java 2D 库时动态地生成图像。Ajax 是一种编程技术,它处理只有页面的一部分需要处理而不需要重新装载整个页面的情…

华为M2平板打不开云课堂_能运行PC应用的安卓生产力平板:华为MatePad Pro 5G登场...

当手机屏幕无法承担更复杂的工作任务,当PC重量不能满足更随性的移动办公,拥有全面屏和便携优势的平板电脑或是中间值,但前提是其必须拥有足够强大的生产力。5月27日华为在国内上市的其首款5G平板——华为MatePad Pro 5G,就是5G时代…

或许你不知道的10条SQL技巧(转自58沈剑原创)

这几天在写索引,想到一些有意思的TIPS,希望大家有收获。 一、一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!0 and stauts!1 not in/not exists都不是好习惯 可以优化为in查询: se…

dhtmlXGrid复选框点击事件

dhtmlXGrid复选框点击事件var mygrid; //加载初始界面 $(function () {mygrid new dhtmlXGridObject(colour);mygrid.setImagePath(getUrlPath() "/static/plugg/dhtmlx/dhtmlxGrid/codebase/imgs/");mygrid.setHeader("#master_checkbox,状态,查看,编辑,xxx,…

soa示例_SOA示例应用程序

soa示例SOA描述了一组用于创建松散耦合的,基于标准的,与业务相关的服务的模式,由于描述,实现和绑定之间的关注点分离,因此提供了新的灵活性。 近年来,至少在参与大多数信息技术活动的人们中,面向…

阿里云图片剪裁

ng-src"{{(buttomImg.imgUrl176h_632w_1e_1c)}}" alt"Space" 转载于:https://www.cnblogs.com/karila/p/7205967.html

body curl 设置post_curl 命令详解

常用参数常用参数分类# 调试类-v, --verbose 输出信息-q, --disable 在第一个参数位置设置后 .curlrc 的设置直接失效,这个参数会影响到 -K, --config -A, --user-agent -e, --referer-K, --config FILE …

sql语句lastupdate使用数据库库函数

sql语句lastupdate使用数据库库函数<sql id"Base_Column_List">CKLSH, ZJLX, ZJHM, MC, CBR, SJY, HJSZD, GJ, ZT, AH, FYDM, DJPC, LASTUPDATE, SSDW</sql><insert id"saveCkdx">INSERT INTO CK_CKDX(<include refid"Base_Colu…

NetBeans Java EE技巧7:忽略的Java类和XHTML编辑器快捷方式

有时&#xff0c;最被忽略的是IDE最有用的功能。 在本文中&#xff0c;我将概述在开发Java EE应用程序时可以使用的五个NetBeans Java和XHTML编辑器快捷方式。 &#xff03;1 –轻松修复命名空间和类 也许您已经向尚未声明名称空间的视图中添加了新的JSF标记&#xff0c;或者…

python学习第三十二节(进程间通信、进程池、协程)

当多线程创建完毕之后&#xff0c;start并没有了立刻运行&#xff0c;依旧需要和其他线程抢CPU的资格&#xff0c;只是时间很短。进程之间的通信分为两种&#xff0c;queue和pipe 1 import multiprocessing2 def foo(q):3 q.put([1,hello,True])4 if __name____main__:5 …

备份ad_IT管理公开课——备份恢复解决方案

时间&#xff1a;2020年5月28日 14:00内容&#xff1a;调查显示&#xff0c;44&#xff05;的客户面临意外删除或修改数据&#xff0c;如果没有提前备份&#xff0c;这些数据是很难恢复的。RecoveryManager Plus是一款针对AD域&#xff0c;Exchange&#xff0c;Sharepoint以及O…

Ajax中的url使用规则

Ajax中的url使用规则Ajax中的url使用规则如下&#xff1a; 先封装项目访问地址&#xff1a; String basePath request.getScheme() "://" request.getServerName() ":" request.getServerPort() request.getContextPath();然后在js中定义&#xff1…

[网络管理]全双工与半双工的差别

[网络管理]全双工与半双工的差别 同事说新办公室的网络一直不稳定&#xff0c;常常掉线延迟。检查进口线路和更换转接网线。都无法解决这个问题。预计是不是进口网线中一根或者2根短路&#xff0c;那就改动下网卡属性吧。 把自适应改成全双工10M模式&#xff0c;測试OK。全双工…

echarts大屏模板_完整的可视化大屏分享,科技感十足,各行业直接就能用

你的老板有没有要求过你做一个可视化大屏&#xff1f;或许在你看来&#xff0c;这就是一个无理的需求&#xff0c;很简单啊&#xff0c;做几个动态图表&#xff0c;直接投影到屏幕上不就行了&#xff1f;就算做出来能用数据增长业务吗&#xff1f;不懂为什么要拍脑袋做大屏&…

sql查询字段的值不为空

sql查询字段的值不为空SQRJS IS NOT NULL AND SQRJS <![CDATA[ <> ]]>

Java面试基础知识(1)

1、final, finally, finalize的区别final&#xff1a;修饰符&#xff08;关键字&#xff09;如果一个类被声明为final&#xff0c;没有子类也不能被继承。因此一个类不能既被声明为 abstract的&#xff0c;又被声明为final的。将变量或方法声明为final&#xff0c;可以保证它们…

bird 报表_轻松完成Birt报告

bird 报表这是使用Birt插件在Eclipse中构建报告的完整指南。 Birt或Business Intelligence and Reporting工具是一种无需编写太多Java代码即可生成报告的工具。 如果您使用的是ireport&#xff0c;那么您知道我在说什么&#xff1a;&#xff09;&#xff08;晶体报告..毫无意义…

通过kubeadm安装kubernetes 1.7文档记录[docker容器方式]

参照了网上N多文档&#xff0c;不一一列表&#xff0c;共享精神永存&#xff01;&#xff01;&#xff01;&#xff01; 获取所有安装包 安装包分为两类&#xff0c;rpm安装包和docker镜像 rpm安装包 rpm为以下四个 kubeadm-1.7.0-0.x86_64.rpm kubectl-1.7.0-0.x86_64.rpm ku…

san框架计数的textarea

san框架计数的textarea<template><div style"height: 100%;width:100%;"><div style"border-bottom: 1px solid #e7e7e7"><div style"height:230px;overflow: hidden;"><t-textarea id"cxfssy" value"…