首先
限制 说明
@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
对应得实体类假设为
public class AAA {
@Pattern(
regexp = "^(Draft|Active|Inactive)$",
message = "Please input valid action, only Draft|Active|Inactive " + "is allowed")
private String action;
@Pattern(regexp = "^.{0,100}$", message = "Product name only allows 1-100 characters")
private String productName;
@Pattern(regexp = "^.{0,500}$", message = "Product description only allows 1-500 characters")
private String description;
private String startDate;
private String endDate;
@Pattern(
regexp = "^(Day|Week|Month|Year)$",
message = "Please input valid termUnit, only Day|Week|Month|Year is " + "allowed")
private String termUnit;
@Pattern(regexp = "(\\d)?", message = "Please input valid termValue, termValue only allows 1 digits")
private String termValue;
@Pattern(
regexp = "^(\\d){0,18}$",
message = "Please input valid counterLimit, counterLimit only allows 1-18 " + "digits")
private String counterLimit;
@Pattern(regexp = "^(\\d){0,18}$", message = "Please input valid minLimit, minLimit only allows 1-18 digits")
private String minLimit;
@Pattern(regexp = "^(\\d){0,18}$", message = "Please input valid maxLimit, maxLimit only allows 1-18 digits")
private String maxLimit;
@Pattern(
regexp = "^(Day|Week|Month|Year|Times)$",
message = "Please input valid rolloverPeriodUnit, only " + "Day|Week|Month|Year|Times is allowed")
private String rolloverPeriodUnit;
@Pattern(
regexp = "^(\\d){0,3}$",
message = "Please input valid rolloverPeriodValue, rolloverPeriodValue only " + "allows 1-3 digits")
private String rolloverPeriodValue;
@Pattern(
regexp = "^(\\d){0,3}$",
message = "Please input valid maxNumberOfRollover, rolloverPeriodValue only " + "allows 1-3 digits")
private String maxNumberOfRollover;
@Pattern(
regexp = "^(.){0,18}$",
message = "Please input valid fundsLenderId, fundsLenderId only allows 1-18 " + "characters")
private String fundsLenderId;
@Pattern(
regexp = "^(\\d){0,3}$",
message = "Please input valid daysToWatch, daysToWatch only allows 1-3 " + "digits")
private String daysToWatch;
@Pattern(regexp = "^(\\d){0,3}$", message = "Please input valid daysToLost, daysToLost only allows 1-3 digits")
private String daysToSubstandard;
@Pattern(regexp = "^(\\d){0,3}$", message = "Please input valid daysToLost, daysToLost only allows 1-3 digits")
private String daysToLost;
@Pattern(regexp = "^(\\d){0,3}$", message = "Please input valid daysToBad, daysToBad only allows 1-3 digits")
private String daysToBad;
private String loanType;
@Pattern(regexp = "^(1000|5000)$", message = "Please input valid availableIdentityType, only 1000|5000 is allowed")
private String availableIdentityType;
@Pattern(
regexp = "^(.){0,10}$",
message =
"Please input valid currencyInMultiplesOf, currencyInMultiplesOf only allows 1-10 " + "characters")
private String currencyInMultiplesOf;
@Pattern(regexp = "^(.){0,10}$", message = "Please input valid strategyId, strategyId only allows 1-10 characters")
private String strategyId;
@Pattern(
regexp = "^(Weekly|Monthly|Maturity)$",
message = "Please input valid repaymentFrequency, only " + "Weekly|Monthly|Maturity is allowed")
private String repaymentFrequency;
@Pattern(
regexp = "^(\\d){0,3}$",
message = "Please input valid repaymentDay, repaymentDay only allows 1-3 " + "digits")
private String repaymentDay;
@Pattern(regexp = "^(F|G|M|S)$", message = "Please input valid repaymentScheduleType, only F|G|M|S is allowed")
private String repaymentScheduleType;
@Pattern(regexp = "^(Y|N)$", message = "Please input valid supportInstallment, only Y|N is allowed")
private String supportInstallment;
@Pattern(regexp = "^(Y|N)$", message = "Please input valid supportAutoRepayment, only Y|N is allowed")
private String supportAutoRepayment;
@Pattern(regexp = "^(Y|N)$", message = "Please input valid allowRepayInAdvance, only Y|N is allowed")
private String allowRepayInAdvance;
@Pattern(
regexp = "^(\\d){0,3}$",
message = "Please input valid statementDaysBeforDue, statementDaysBeforDue only allows 1-3" + " digits")
private String statementDaysBeforDue;
@Pattern(regexp = "^(Y|N)$", message = "Please input valid autoChangeRiskCategory, only Y|N is allowed")
private String autoChangeRiskCategory;
@Pattern(regexp = "^(Y|N)$", message = "Please input valid deductAccessFee, only Y|N is allowed")
private String deductAccessFee;
@Pattern(
regexp = "^(All|Same|Unlimited)$",
message = "Please input valid rejectWhenOverdue, only " + "All|Same|Unlimited is allowed")
private String rejectWhenOverdue;
}
第一种一般在controller入口接收参数加上@Valid
如:
@ApiOperation(value = "/v1/aa", notes = "Modify product info")
@PostMapping(value = "/v1/aa/{productId}")
@ResponseBody
public JsonObject modifyProduct(
@RequestBody @Valid ModifyProductInfoRequest request,
@PathVariable(name = "productId") Long productId,
@org.springframework.web.bind.annotation.RequestHeader(value = "X-Operator-ID", required = false)
String operatorID)
如果此时有不满足条件得会报错
第二种:
如果想在业务中来校验,这样方便于记录日志或者错误原因或者做其他操作得话,可以在对应得service中建一个类似如下得空实现方法
service A{
public void validateRequest(@Valid AAA requestData) {}
}
service b{
@Resource
service A a;
public void doSomeThing( AAA requestData) {
.....
try {
// 使用正则表达式校验数据格式
a.validateRequest(requestData);
} catch (ConstraintViolationException e) {
Set> constraintViolations = e.getConstraintViolations();
for (ConstraintViolation> violation : constraintViolations) {
String path = violation.getPropertyPath().toString();
throw new Exception("xxxxxxxx");
}
}
....
}
}
这样来处理,一定要通过对象.方法来调用,类似 a.validateRequest(requestData);否则不会促发触发Spring Validation校验