Validator 校验参数

本文介绍了一种基于Java的参数验证方法,利用Hibernate Validator进行实体类校验,并提供了两种实现方式:一是通过自定义工具类进行验证,二是利用Spring MVC的@Valid注解结合BindingResult进行验证。

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

需要参数验证的实体类

public class User implements Serializable {

/** */
private static final long serialVersionUID = -4099344363882857295L;

@NotBlank(message = "用户名不能为空")

private String userId;

@NotBlank(message = "身份证号不能为空")
private String certNo;

/**此处省略*/

}

验证的工具类


public class ValidationUtils {


/**
* 使用hibernate的注解来进行验证
* failFast:true  快速失败返回模式    false 普通模式 
*/
private static Validator validator = Validation.byProvider(HibernateValidator.class).configure().failFast(false)
.buildValidatorFactory().getValidator();


/**
* 功能描述:
* 〈注解验证参数〉
*/
public static <T> Map<String, Object> validate(T obj) {
try {
Set<ConstraintViolation<T>> constraintViolations = validator.validate(obj);

if (constraintViolations.size() > 0) {

//这里根据业务要求将所有验证不通过的信息以json传的形式记录在日志里面

//如果只要碰到校验不通过的字段直接返回可以将 failFast设置为true,并在这里直接返回


JsonObject objPro = new JsonObject();

for (ConstraintViolation<T> c : constraintViolations) {

objPro.addProperty(c.getPropertyPath().toString(), c.getMessage());

}

MyLog4j.textInfo("参数校验:" + objPro.toString());
return UserUtils.createMap(GlobalVar.RESULT_CODE_FAIL, GlobalVar.VALIDATE_ERROR_MESSAGE, null);
}
} catch (Exception e) {
e.printStackTrace();
return UserUtils.createMap(GlobalVar.RESULT_CODE_FAIL, "参数校验异常", null);
}
return UserUtils.createMap(GlobalVar.RESULT_CODE_SUCC, "参数校验异常", null);
}

}




@RequestMapping(value = "/calcLoan.do")
public String calcLoan(@RequestBody BaseReqVo baseReqVo, HttpServletRequest request, HttpServletResponse response) {


MyLog4j.textInfo("还款试算查询-请求:" + JsonUtil.toJson(baseReqVo));
User user= JsonUtil.fromJson(baseReqVo.getBizData().toString(), User .class);
/**业务参数校验*/
Map<String, Object> resultMap = ValidationUtils.validate(user);
String result = (String) resultMap.get("resultCode");
/**校验失败*/
if (GlobalVar.RESULT_CODE_FAIL.equals(result)) {
return UserUtils.respMsg(baseReqVo.getMethod(), AllinpalException.ERR_10003,
GlobalVar.VALIDATE_ERROR_MESSAGE, null);
}
//业务逻辑


}

当然也可以通过以下方式-----------------


@RequestMapping(value = "/saveBaseInfo", method = RequestMethod.POST, produces = { "application/json;charset=UTF-8" })
@ResponseBody
public Map<String, Object> saveBaseInfo(HttpServletRequest request, HttpServletResponse response,
 @Valid ApplyBasicInfoForm basicInfoForm, BindingResult result) {
Map<String, Object> resultMap = new HashMap<String, Object>();
if (result.hasErrors()) {
List<FieldError> fieldErrors = result.getFieldErrors();
for (FieldError error : fieldErrors) {
MyLog4j.textInfo("基本信息校验异常:" + error.getField() + ",错误消息:" + error.getDefaultMessage());
return AjaxUtils.createMapByMsg(ConstantParamUtils.RESULT_CODE_FAIL, error.getDefaultMessage(),
basicinfo.getUrl(), basicinfo.getToken(), resultMap);
}

}

//TODO  

}


public class ApplyBasicInfoForm {
/**单位名称*/
@NotBlank(message = "请填写完整的资料!")
@Length(max = 150, message = "单位名称不能大于150字符")
@Pattern(regexp = "^[\u4e00-\u9fa5a-zA-Z0-9]+$", message = "单位名称包含非法字符")
private String companyName;
/**单位电话*/
@NotBlank(message = "请填写完整的资料!")
@Length(max = 20, message = "单位电话大于20字符")
private String companyPhone;

    //省略--------


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值