您的位置:首页 > 编程语言 > Java开发

javax.validation参数校验

2018-06-14 14:08 351 查看

在实体字段加注解:

/**
* 机构名称
*/
@ApiParam(name = "orgName", value = "机构名称")
@Size(max = 40,message = "机构名称长度不能超过40!")
@FieldName(desc = "机构名称")
private String orgName;

说明:@Size是javax.validation中的注解。还有其他注解可参考javax.validation的所有注解。

注意:

1.字段有值校验;没值不校验。当我们只校验一个实体的一部分字段,只要保证另一部分字段值为空就可以了。

2.@Valid校验;工具类校验。

代码:

1.@Valid校验作用在方法头上

@RequestMapping(value = "/saveInsuredForDomestic",method = RequestMethod.POST)
@ApiOperation(value = "保存被保险人(国内)", httpMethod = "POST", response = BaseResponse.class,notes = "保存被保险人")
@ResponseBody
public BaseResponse saveInsuredForDomestic(HttpServletRequest request,@ApiParam(name = "被保险人") @ModelAttribute("insuredDomesticParam") @Valid InsuredDomesticParam insuredDomesticParam){
...
}

这种方式校验在进入方法之前就对实体中的字段进行了校验。

2.手动校验:

// 参数类型校验
List<String> validateError = VlidationUtil.validate(prodEverydayTaskPO);
if(validateError != null && validateError.size() > 0){
return Pair.of(false,validateError.get(0));
}

工具类VlidationUtil:

package com.product.util;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.xml.bind.ValidationException;

/**
* 校验工具类
* VlidationUtil
* @author: liuyachao
* 2018/6/6 11:11
*/
public class VlidationUtil {
private static Validator validator;

static {
ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
validator = vf.getValidator();
}
/**
* javax.validation注解校验
* @throws ValidationException
* @throws ValidationException
* @Description: 校验方法
* @param t 将要校验的对象
* @throws ValidationException
* void
* @throws
*/
public static <T> List<String> validate(T t){
Set<ConstraintViolation<T>> set =  validator.validate(t);
List<String> validateError = new ArrayList<>();
if(set.size()>0){
for(ConstraintViolation<T> val : set){
validateError.add(val.getMessage());
}
}
return validateError;
}

/**
* 是否正整数
* @param str
* @return
*/
public static boolean isPositiveInteger(String str){
boolean flag=false;
try{
String regex="^[1-9]+[0-9]*$";
Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(str);
if(m.find()){
return true;
}
}catch(Exception e){
e.printStackTrace();
}
return flag;
}

}

此种方式校验可在代码里面任何地方进行校验。相对于@Valid比较灵活。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐