javax.validation参数校验

本文介绍了如何在实体字段上使用注解进行数据校验,并提供了两种校验方式:使用@Valid注解进行前置校验及通过自定义工具类VlidationUtil进行手动校验。此外还提供了一个用于校验的工具类示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实体字段加注解:

/**
     * 机构名称
     */
    @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比较灵活。

 

转载于:https://www.cnblogs.com/super-chao/p/9182750.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值