网站域名备案注销,销售平台建设方案,注册域名卖钱很暴利吗,网页制作与设计自考前言 在实战开发中#xff0c;数据校验也是十分重要的环节之一#xff0c;数据校验大体分为三部分#xff1a; 前端校验后端校验数据库校验 本文讲解如何在后端控制端进行表单校验的工作 案例实现 在进行项目开发的时候,前端(jquery-validate),后端,数据库都要进行相关的数据…前言 在实战开发中数据校验也是十分重要的环节之一数据校验大体分为三部分 前端校验后端校验数据库校验 本文讲解如何在后端控制端进行表单校验的工作 案例实现 在进行项目开发的时候,前端(jquery-validate),后端,数据库都要进行相关的数据校验,springmvc也支持校验,但是没有进行具体的实现,所以要添加hibernate的依赖来完成校验 第一步添加依赖
pom.xml
dependencygroupIdjavax.validation/groupIdartifactIdvalidation-api/artifactIdversion1.1.0.Final/version
/dependencydependencygroupIdorg.hibernate/groupIdartifactIdhibernate-validator/artifactIdversion5.1.3.Final/version
/dependency
第二步创建表单提交页面和实体类 实体类Transaction 在相关的实体类中,根据需要加入校验规则,它支持email,日期等内置校验规则 public class Transaction {// 产品编号NotNull // 不能为空private Long productId;// 用户编号NotNull // 不能为空private Long userId;// 交易日期Future // 只能是将来的日期DateTimeFormat(pattern yyyy-MM-dd) // 日期格式化转换NotNull // 不能为空private Date date;// 价格NotNull // 不能为空DecimalMin(value 0.1) // 最小值0.1元private Double price;// 数量Min(1) // 最小值为1Max(100) // 最大值NotNull // 不能为空private Integer quantity;// 交易金额NotNull // 不能为空DecimalMax(500000.00) // 最大金额为5万元DecimalMin(1.00) // 最小交易金额1元private Double amount;// 邮件Pattern(// 正则式regexp ^([a-zA-Z0-9]*[-_]?[a-zA-Z0-9])* ([a-zA-Z0-9]*[-_]?[a-zA-Z0-9])[\\.][A-Za-z]{2,3}([\\.][A-Za-z]{2})?$,// 自定义消息提示message 不符合邮件格式)private String email;// 备注Size(min 0, max 256) // 0到255个字符private String note;public Long getProductId() {return productId;}public void setProductId(Long productId) {this.productId productId;}public Long getUserId() {return userId;}public void setUserId(Long userId) {this.userId userId;}public Date getDate() {return date;}public void setDate(Date date) {this.date date;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price price;}public Integer getQuantity() {return quantity;}public void setQuantity(Integer quantity) {this.quantity quantity;}public Double getAmount() {return amount;}public void setAmount(Double amount) {this.amount amount;}public String getEmail() {return email;}public void setEmail(String email) {this.email email;}public String getNote() {return note;}public void setNote(String note) {this.note note;}}
JSP页面validate.jsp
% page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8%
!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//ENhttp://www.w3.org/TR/html4/loose.dtd
htmlheadmeta http-equivContent-Type contenttext/html; charsetUTF-8titlevalidate/title/headbodyform action /validate/vali.do!-- form action ./validate/validator.do--tabletrtd产品编号/tdtdinput nameproductId idproductId//td/trtrtd用户编号/tdtdinput nameuserId iduserId//td/trtrtd交易日期/tdtdinput namedate iddate//td/trtrtd价格/tdtdinput nameprice idprice//td/trtrtd数量/tdtdinput namequantity idquantity/ /td/trtrtd交易金额/tdtdinput nameamount idamount//td/trtrtd用户邮件/tdtdinput nameemail idemail//td/trtrtd备注/tdtdtextarea idnote namenote cols20 rows5/textarea/td/trtrtd colspan2 alignright input typesubmit value提交/ /tr/tableform/body
/html
第三步编写校验器
TransactionValidator
package com.csx.validate;import com.csx.entity.Transaction;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;public class TransactionValidator implements Validator {//表示判断是否是指定被校验的类,如例子当中的Transaction,如果是,会返回true,继续进行校验Overridepublic boolean supports(Class? aClass) {//如果是Transaction类,返回true,进行验证return Transaction.class.equals(aClass);}//编写校验规则Overridepublic void validate(Object obj, Errors errors) {Transaction tran (Transaction) obj;//求总金额和单价及数量的差额double dis tran.getAmount() - (tran.getQuantity() * tran.getPrice());if (Math.abs(dis) 0.01) {errors.rejectValue(amount,null,交易金额有误,请检查);}}
}第四步编写控制层
TransactionController
RequestMapping(/validate)
Controller
public class TransactionController {RequestMapping(/vali)public ModelAndView addTran(Valid Transaction tran, Errors errors) {//判断是否有校验错误信息if (errors.hasErrors()) {ListFieldError list errors.getFieldErrors();for (FieldError f : list) {System.out.println(error Filed: f.getField() ,errorMsg: f.getDefaultMessage());}}return new ModelAndView(index);}//为当前控制器开启验证InitBinderpublic void initBinder(DataBinder binder) {binder.setValidator(new TransactionValidator());}}使用hasErrors判断是否有校验错误如果有,使用getFieldErrors()获取错误集合,使用getField()获取错误字段,使用getDefaultMessage获取错误信息如果违反了定义的校验规则,则会报错 测试
表单提交页面 故意将日期和交易金额填写错误并提交 后台控制台显示数据错误提示 箭头指向的第一个是date即日期格式错误箭头指向的第二个表示交易金额错误为我们自定义的提示信息 总结 数据校验在实际开发中很重要而仅仅做了前端校验还是不安全的因此我们还可以进行后台的数据校验。