spring mvc 参数校验
当业务需要参数校验的时候,可以直接在controller 写入校验逻辑
参数校验经验: 用户业务,前端页面校验、服务端参数 校验
管理后台:前端校验,服务端可以放开
javax.validation包提供了常见参数的校验注解,如果常见注解不能满足可以使用
@Pattern 注解 使用正则表达式校验
校验注解:
这是javax.validation包中的 主要包括上述的几个注解
注解 描述
@AssertFalse 被注释的元素必须为 false
@AssertTrue 同@AssertFalse
@DecimalMax 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin
同DecimalMax
@Digits 被注释的元素是数字
@Future 将来的日期
@Max 被注释的元素必须是一个数字,其值必须小于等于指定的最大值
@Min 被注释的元素必须是一个数字,其值必须大于等于指定的最小值
@NotNull 不能是Null
@Null
元素是Null
@Past 被注释的元素必须是一个过去的日期
@Pattern 被注释的元素必须符合指定的正则表达式
@Szie 被注释的元素
mvc 接收参数的基本形式
1.1 @PathVariable
略:
1.2 @RequestParam
直接在@RequestParam 后添加校验注解
并在类上添加 @Validated 注解
@Validated
public class UserController extends AbstractController {
@PostMapping("id_card/add")
@ApiOperation(value = "用户身份证信息提交")
Resp<Boolean> userAddInfo(@Pattern(regexp ="^[\\u4e00-\\u9fa5]{2,10}$",message = "请输入中文姓名") String username, @Pattern(regexp = "^[0-9]{18}$", message = "身份证号只支持数字,18位") @RequestParam("id_card") String id_card) {
User user = new User();
user.setId(userAccountService.userInfoByUuid(getCurrentUserUuid()).getId());
user.setIdCard(id_card);
user.setUsername(username);
EntityUtil.prevModify(user);
if (userAccountService.userIdCradInfoAdd(user)) {
return Resp.success(Boolean.TRUE);
}
return Resp.customFail("419", "用户身份证信息添加失败");
}
}
如果业务逻辑复杂,参数较多情况下
使用@requestBody 接收参数,在实体中写入校验规则
Bean Validation为JavaBean提供了相应的API来给我们做参数的验证。通过Bean Validation比如@NotNull @Pattern等方法 可以方便的集成数据校验逻辑。
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.Pattern;
/**
* @version :
* @date :2019-08-14
*/
@Data
public class BankCardForm {
@ApiModelProperty(value = "用户姓名", notes = "用户姓名中文")
@Pattern(regexp = "^[\\u4e00-\\u9fa5]{2,10}$", message = "姓名只支持中文 2-10个汉字")
private String username;
@ApiModelProperty(value = "用户身份证号码", notes = "用户身份证号码")
@Pattern(regexp = "^[0-9]{18}$", message = "身份证号只支持数字,18位")
private String idCard;
@ApiModelProperty(value = "开户行名称", notes = "开户行")
@Pattern(regexp = "^[\\u4e00-\\u9fa5]{2,20}$", message = "开户行只支持中文 2-20个汉字")
private String bankName;
@ApiModelProperty(value = "银行卡号", notes = "银行卡号")
@Pattern(regexp = "^[0-9]{15,20}$", message = "银行卡号只支持数字,15-20位")
private String cardNo;
}
如果参数校验未通过
会抛出异常
javax.validation.ConstraintViolationException: null
接下来
我们在拦截器中统一处理异常 给前端接口
参考资料:
https://www.jianshu.com/p/89a675b7c900
上一篇: spring mvc 数据校验
下一篇: openssl-1.0.2t 交叉编译
推荐阅读