为了使controller层与service曾业务做到不强相关,避免service存在大量重复的代码,可以在controller曾通过注解的形式对请求参数进行校验。并结合BindingResult进行判断。
public class UserForm implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 手机号
*/
@NotBlank(message = "{required}")
@Pattern(regexp = RegexpConstant.MOBILE_REG, message = "{mobile}")
private String telephone;
/**
* 密码
*/
private String password;
//省略getter和setter
}
public ResponseResult test(@Valid UserForm UserForm, BindingResult bindingResult) throws Exception {
//在这里,我们判断参数是否通过校验
if (bindingResult.hasErrors()) {
Map
for (FieldError item:bindingResult.getFieldErrors()) {
errorMsg.put(item.getField(),item.getDefaultMessage());
}
//自定义的返回,并将错误信息返回
return new ResponseResult(false,200, JSON.toJSONString(errorMsg),errorMsg);
}
PublicUser publicUser = publicUserService.regist(publicUserForm);
return new ResponseResult(true,200,"访问成功!",null);
}
字段注解(所属包:javax.validation.constraints.*)。
字段注解说明
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@NotEmpty 验证注解的元素值不为null或者空(isEmpty()方法)可用于字符串, Collection, Map, 数组。
@NotBlank 验证注解的元素值不为null且包含除了空格之外至少一个字符。只用于字符串。
@Null 限制只能为null
@NotNull 限制必须不为null
@Past 验证注解的元素值(日期类型)比当前时间早
@Size(max,min) 限制字符长度必须在min到max之间