javax.validation参数校验
在实体字段加注解:
/**
* 机构名称
*/
@ApiParam(name = "orgName", value = "机构名称")
@Size(max = 40,message = "机构名称长度不能超过40!")
@FieldName(desc = "机构名称")
private String orgName;
说明:@Size是javax.validation中的注解。还有其他注解可参考javax.validation的所有注解。
注意:
1.字段有值校验;没值不校验。当我们只校验一个实体的一部分字段,只要保证另一部分字段值为空就可以了。
代码:
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比较灵活。