JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。
JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator。
此实现与 Hibernate ORM 没有任何关系。 JSR 303 用于对 Java Bean 中的字段的值进行验证。
Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。
注:可以使用注解的方式进行验证。
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.1.Final</version>
</dependency>
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
<property name="providerClass" value="org.hibernate.validator.HibernateValidator"/>
<property name="validationMessageSource" ref="validationMessageSource" />
</bean>
<bean id="validationMessageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>classpath:validationMessageSource</value>
</list>
</property>
</bean>
/** * @author jelly */ public class Goods implements Serializable { private static final long serialVersionUID = 1L; @NotBlank(message="{goods.name.notBlank}") @Length(min=1,max=20,message="{goods.name.add}",groups= {GoodsAddVG.class})//add @Size(min=1,max=30,message="{goods.name.update}",groups= {GoodsUpdateVG.class})//update private String goodsName;//商品名称 private Integer stockNum;//库存 @NotBlank(message="{goods.remark.notBlank}") private String remark;//备注 public String getGoodsName() { return goodsName; } public void setGoodsName(String goodsName) { this.goodsName = goodsName; } public Integer getStockNum() { return stockNum; } public void setStockNum(Integer stockNum) { this.stockNum = stockNum; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } }
package com.tingcream.pagehelper.controller; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.validation.ObjectError; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.tingcream.pagehelper.common.RetMsg; import com.tingcream.pagehelper.model.Goods; import com.tingcream.pagehelper.req.GoodsAddVG; import com.tingcream.pagehelper.req.GoodsUpdateVG; /** * 商品controller group分组校验 * @author jelly * */ @RestController @RequestMapping("/goods") public class GoodsController { /** * add 方法 * @param goods * @param bindingResult * @return */ @RequestMapping("/add") public RetMsg add(HttpServletRequest request, HttpServletResponse response, @Validated(value= {GoodsAddVG.class}) Goods goods, BindingResult bindingResult) { if(bindingResult.hasErrors()){// 参数验证失败 ListerrList =bindingResult.getAllErrors(); Map map= new HashMap<>(); errList.stream().forEach((ObjectError err)->{ String field= ((FieldError)err).getField(); String msg =err.getDefaultMessage(); map.put(field,msg); }); return RetMsg.fail(map); } return RetMsg.success(); } /** * update 方法 * @param goods * @param bindingResult * @return */ @RequestMapping("/update") public RetMsg update(@Validated(GoodsUpdateVG.class) Goods goods, BindingResult bindingResult) { if(bindingResult.hasErrors()){// 参数验证失败 List errList =bindingResult.getAllErrors(); Map map= new HashMap<>(); errList.stream().forEach((ObjectError err)->{ String field= ((FieldError)err).getField(); String msg =err.getDefaultMessage(); map.put(field,msg); }); return RetMsg.fail(map); } return RetMsg.success(); } }
import javax.validation.groups.Default; /** * 商品添加 验证组 * @author jelly */ public interface GoodsAddVG extends Default{ }
package com.tingcream.pagehelper.req; import javax.validation.groups.Default; /** * 商品修改 验证组 * @author jelly */ public interface GoodsUpdateVG extends Default{ }
validationMessageSource.properties 配置
goods.name.notBlank=商品名称不能为空 goods.name.add=商品名称为1-20个字符 goods.name.update=商品名称为1-30个字符 goods.remark.notBlank=备注不能为空
注 :
1 、STS(eclipse) 中可以安装Properties Editor 插件,支持properties文件中编写中文的属性值。
2、 bean注解示例:
@NotNull(message = "所属部门不能为空")
private Integer deptId;
@NotBlank(message = "手机号不能为空")
@Pattern(regexp = "^(13|14|15|16|17|18|19)[0-9]{9}$", message = "手机号格式错误")
private String phone;
@NotBlank(message = "登录账号不能为空")
@Length(min=6,max=32,message="登录账号长度为6~32位")
private String loginName;
Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1