在实体字段加注解:
/**
* 机构名称
*/
@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比较灵活。