一、什么是Validator接口
Validator 接口是 Spring Framework 里面的一组校验接口,它实现了数据的校验功能。当我们在使用 SpringMVC 框架开发 web 项目时,需要进行表单数据的校验。为了降低代码复杂度和提高代码的可读性和可维护性,我们可以使用 Validator 接口对表单数据进行校验。
二、使用 Validator 接口进行数据校验的步骤
1.编写校验规则:创建一个实现 Validator 接口的类,重写 Validator 接口中的 validate 方法,在方法中编写数据校验的规则。
2.在控制器中绑定校验器:在控制器中注册校验器,将校验器与数据模型绑定。
3.将校验结果绑定到 model 中:在校验失败时,将错误信息绑定到 model 中,供视图页面进行显示。
4.在视图页面中显示校验结果:在视图页面中使用 SpringMVC 框架提供的 form 标签库,以及 Spring 表单校验标签库,进行表单的渲染和校验结果的显示。
三、使用 Validator 接口进行数据校验的示例
1.创建校验规则:
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
public class UserValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return User.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "username", "required", "用户名不能为空");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "required", "密码不能为空");
User user = (User) target;
if (user.getUsername().length() < 6) {
errors.rejectValue("username", "length", "用户名长度不能小于6位");
}
if (user.getPassword().length() < 6) {
errors.rejectValue("password", "length", "密码长度不能小于6位");
}
}
}
上面的代码表示用户注册时需要填写用户名和密码,如果用户名或密码为空,都会返回“不能为空”的错误信息,如果用户名或密码长度小于6位,会返回“长度不能小于6位”的错误信息。
2.在控制器中绑定校验器:
@Controller
public class UserController {
@Autowired
private UserValidator userValidator;
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setValidator(userValidator);
}
@RequestMapping(method = RequestMethod.POST, path = "/user/register")
@ResponseBody
public ResponseEntity<ResponseResult<Object>> register(@Valid @RequestBody User user, BindingResult result) {
if (result.hasErrors()) {
return ResponseResult.failed(validate(result));
}
// ... 处理用户注册逻辑
return ResponseResult.success(null);
}
private String validate(BindingResult result) {
StringBuilder sb = new StringBuilder();
for (ObjectError error : result.getAllErrors()) {
sb.append(error.getDefaultMessage()).append("\n");
}
return sb.toString();
}
}
上面的代码中,我们通过 @InitBinder
注解,将 UserValidator
和 WebDataBinder
进行绑定。在 register
方法中,通过 @Valid
注解标注被校验的 User
对象。在 register
方法的入参中添加 BindingResult
对象,如果校验不通过,会将校验结果绑定到该对象中。
3.将校验结果绑定到 model 中:
请参考 register
方法中的 if (result.hasErrors())
代码块。
4.在视图页面中显示校验结果:
<form:form ...>
<form:errors path="username" cssClass="error"></form:errors>
<form:input path="username"></form:input>
<form:errors path="password" cssClass="error"></form:errors>
<form:password path="password"></form:password>
<input type="submit" value="注册">
</form:form>
上面的代码使用了 SpringMVC 框架的 form
标签库和 Spring 表单校验标签库,当校验失败时,会在 form:errors
标签处显示错误信息。
四、使用 SpringMVC 提供的校验规则注解进行数据校验的示例
1.创建校验规则:
public class User {
@NotBlank(message = "用户名不能为空")
@Length(min = 6, message = "用户名长度不能小于6位")
private String username;
@NotBlank(message = "密码不能为空")
@Length(min = 6, message = "密码长度不能小于6位")
private String password;
// ... getter/setter 方法
}
上面的代码中,我们使用了 SpringMVC 提供的 @NotBlank
注解和 @Length
注解,对表单数据进行了校验。
2.在控制器中绑定校验器:
请参考上面的示例中的控制器代码。
3.将校验结果绑定到 model 中:
请参考上面的示例中的控制器代码。
4.在视图页面中显示校验结果:
请参考上面的示例中的表单代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java开发之基于Validator接口的SpringMVC数据校验方式 - Python技术站