前提概要
在Spring MVC和FreeMarker整合的项目中,采用JSR-303验证框架,通过注解的方式进行数据验证
基础框架
MVC:Spring MVC 3
视图:FreeMarker
验证:Hibernate-validator实现
配置文件和Java代码的修改
在Spring MVC配置文件中添加配置
添加以下mvc的注解驱动配置,一切变成“自动化”
<mvc:annotation-driven />
在JavaBean中添加数据校验的注解
其中@Length、@email就是Hibernate-validator中的数据校验注解,还可以用javax.validation中的注解,比如@NotNull
public class SystemUser {
@Length(min = 5, max = 20, message = "用户名长度必须位于5到20之间")
private String userName;
@Email(message = "比如输入正确的邮箱")
private String email;
}
在Controller方法中指定需要进行校验
首先,要在需要进行校验的Bean前面加上@Valid注解,告诉SpringMVC框架这个Bean需要进行校验;
同时,还要在需要校验的Bean前面加上@modelattribute注解,从而将Bean暴露给视图,并且指定名字,这有两个作用,第一是显示校验错误需要使用这个名字,第二个是返回原来的页面以后,前面输入的所有值还要显示出来;
其次,每个需要校验的Bean后面紧跟一个BindingResult,SpringMVC框架会将校验结果保存在它里面,通过hasErrors方法可以判断是否有校验错误;
最后,当返回到原页面以后,SpringMVC框架还会将所有校验错误信息保存在上下文中,供页面上取得校验错误,Spring提供了一套JSP自定义标签。
@RequestMapping(value = "/create.html", method = RequestMethod.POST)
public String doCreateUser(
@Valid @ModelAttribute("userDetail") SystemUser user,
BindingResult bindingResult,
HttpServletRequest request) {
// 如果有校验错误,返回添加用户的页面
if (bindingResult.hasErrors()) {
return "/user/create";
}
this.userService.createUser(user);
return "/user/list.html";
}
进行自定义校验
如果需要添加自定义校验,比如验证用户名是否已经被使用了,那么简单的注解自然无能为力,需要自己编码实现,如果校验失败,可以手动将自定义校验错误添加到BindingResult中。
@RequestMapping(value = "/user/create.html", method = RequestMethod.POST)
public String doCreateUser(
@Valid @ModelAttribute("userDetail") SystemUser user,
BindingResult bindingResult,
HttpServletRequest request) {
// 如果有数据校验错误,返回添加用户的页面
if (bindingResult.hasErrors()) {
return "/user/create";
}
boolean isUserNameExist = this.userService.checkUserByUserName(user.getUserName());
// 如果用户名已存在,返回添加用户的页面
if (isUserNameExist) {
// 向BindingResult添加用户已存在的校验错误
bindingResult.rejectValue("userName", "该用户名已存在", "该用户名已存在");
return "/user/create";
}
this.userService.createUser(user);
return "/user/list.html";
}
在JSP页面上显示校验错误信息
返回页面以后,SpringMVC框架将所有校验错误信息都放在了上下文中,可以自己去取出来,但是那样非常麻烦,不过没关系,Spring提供了一套自定义标签,可以方便的显示校验错误信息。
页面头部需要导入Spring的自定义标签库
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
需要一次性显示全部校验错误
(commandName的值就是@modelattribute注解中指定的值)
<form:form commandName="userDetail">
<form:errors path="*" cssStyle="color:red"></form:errors>
</form:form>
需要在对应输入框的后面显示单个校验错误
(通过path指定显示那个具体的校验错误,userDetail正是@modelattribute注解中指定的值,而点号后面则是指定显示Bean中哪个属性的校验错误)
<input type="text" name="userName" value="${userDetail.userName}" >
<form:errors path="userDetail.userName" cssStyle="color:red"></form:errors>
<input type="text" name="email" value="${userDetail.email}">
<form:errors path="userDetail.email" cssStyle="color:red"></form:errors>
相关推荐
如果验证失败,`bindingResult`会包含错误信息。 3. **自定义验证**: 自定义验证涉及到实现`org.springframework.validation.Validator`接口。你需要创建一个类并实现`validate`方法,该方法接收要验证的对象和`...
如果存在验证失败的情况,bindingResult将包含错误信息。 为了自定义全局的错误消息处理,我们可以在Spring MVC的配置中定义一个HandlerExceptionResolver,例如使用`HandlerExceptionResolverAdapter`: ```java ...
在这里,如果用户提交的数据不符合`User`类上的验证规则,`BindingResult`对象将包含验证错误信息,可以进一步处理这些错误。 ### 四、自定义Validator 虽然JSR-303/349提供了一系列通用的验证注解,但有时我们...
通常,验证框架会提供自定义错误消息的功能,允许开发者设置特定的错误提示文本。在JSON响应中,可以将错误信息映射到一个字段,如`errors`,前端根据这个字段来显示错误。 5. **Spring与JDOM** Spring是Java企业...
4. **处理验证结果**:如果验证失败,可以通过`BindingResult`获取错误信息,如错误字段名和错误消息,然后反馈给用户。 此外,JSR303还支持自定义验证注解和验证器,这使得我们可以根据具体业务需求扩展验证功能。...
`validate()`方法用于验证对象,如果验证失败,它会将错误信息添加到`Errors`或`BindingResult`对象中。 2. **国际化支持**:项目中提到的支持国际化意味着,错误消息可以根据用户的语言设置显示不同的文本。这通常...
如果对参数校验发现有误,会将错误注入到 BindingResult 中。 ``` @Valid public void test(@Valid User user, BindingResult bindingResult) { if (bindingResult.hasErrors()) { List<ObjectError> errors = ...
此外,`BindingResult`对象用于存储验证结果,可以用来处理错误信息。你需要确保Spring MVC的jar包也包含在类路径中。 4. **使用示例**: 在模型类中,你可以定义验证规则: ```java public class User { @Not...
3. **全局错误处理**:当校验失败时,Spring MVC 可以通过 `BindingResult` 对象获取校验错误信息。为了提供统一的错误响应,我们可以配置一个全局异常处理器,捕获 `MethodArgumentNotValidException` 异常,然后...
如果存在验证错误,`BindingResult`将包含错误信息。 4. **HandlerAdapter和HandlerExceptionResolver**:SpringMVC的`HandlerAdapter`处理请求并调用控制器方法,而`HandlerExceptionResolver`负责处理包括验证...
这段代码会检查`User`对象中的所有字段,如果不符合验证规则,`BindingResult`将包含错误信息,从而返回错误响应。 此外,还可以使用AJAX技术实现实时的前端验证,通过JavaScript发送异步请求到服务器,获取验证...
如果验证失败,Spring会自动创建一个包含错误信息的`BindingResult`对象,开发者可以通过这个对象获取并显示错误信息。 为了实现JSR303验证,我们需要在项目中引入相关的依赖,比如Hibernate Validator,它是JSR303...
public String createUser(@Valid User user, BindingResult bindingResult) { if (bindingResult.hasErrors()) { // 处理错误,返回错误信息 } else { // 保存用户 } } ``` 以上就是SpringMVC Controller...
开发者可以通过`BindingResult`获取错误信息,并决定如何呈现给用户,例如重定向到错误页面或显示错误消息。 4. **整合Hibernate Validator** Hibernate Validator是Bean Validation的实现,可以与SpringMVC无缝...
在这个例子中,如果用户名为空、密码长度不符合要求或电子邮件格式不正确,`BindingResult`对象将包含相应的错误信息。我们可以在视图层(如JSP或Thymeleaf)中遍历这些错误,并显示给用户。 为了提高代码的可重用...
`BindingResult`参数用于捕获验证结果,如果表单数据不合法,Spring MVC会自动填充错误信息。 `BeanUtils.java`通常包含了一些实用工具方法,比如对象复制或者转换。在数据校验场景下,这些工具方法可能用于将校验...
在上面的例子中,`@Valid`注解会触发对`User`对象的校验,如果校验失败,`BindingResult`对象将包含校验错误信息。我们可以检查`BindingResult`来决定是否继续处理请求,或者向用户返回错误消息。 除了使用预定义的...
当提交表单时,Spring MVC会调用`hibernate-validator` 进行验证,如果有错误,`BindingResult`对象会包含这些错误信息,可以用来显示错误提示。 总之,`hibernate-validator` 通过提供简单易用的API和注解,极大地...
3. **BindingResult**:在表单提交场景中,使用 `@Validated` 注解验证模型对象,并通过 BindingResult 获取验证错误信息。 4. **自定义异常类型**:创建自定义异常类型并包含错误信息,然后在处理器中抛出。 ### ...
如果验证失败,Spring会自动将错误信息填充到`BindingResult`对象中。例如: ```java @PostMapping("/register") public String register(@Valid User user, BindingResult bindingResult) { if (bindingResult....