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()){// 参数验证失败
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();
}
/**
* 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