在使用Spring MVC时,使用了它服务端的验证Validator 验证。遇到了一个问题,在这里记录下。
问题:由于在一个Controller中存在多个可供WEB端使用的方法,根据方法的不同调用不同的验证Validator 进行对参数的验证,例子如下所示:
方法一简单案例:
public String amethod(@ModelAttribute("matObjecta")MatObjectA matObjecta, BindingResult bindingResult){ ...... } @InitBinder("matObjecta") public void initBinder(DataBinder binder) { binder.setValidator(new MatobjectAvalidator()); }
方法二简单案例:
public String bmethod(@ModelAttribute("matObjectb")MatObjectB matObjectb, BindingResult bindingResult){ ...... } @InitBinder("matObjectb") public void initBinder(DataBinder binder) { binder.setValidator(new MatobjectBvalidator()); }
一、注解说明:
@ModelAttribute("") 注解用于指定的参数的名称,如果不指定默认是对象名称的首字母小写形式。
@InitBinder("")注解的参数为@ModelAttribute("") 设置的参数名称时,表示此方法只会在存在@ModelAttribute("") 指定名称相同的参数时,在方法体调用之前执行。如果@InitBinder未设置任何参数时将会在Controller下的所有方法体调用之前都会默认执行,并将反馈结果存在BindingResult 中返回。
二、验证方法书写方式
public class MatobjectAvalidator implements Validator { @Override public boolean supports(Class<?> clazz) { return MatObjectA.class.equals(clazz); } @Override public void validate(Object target, Errors errors) { MatObjectA matObjectA = (MatObjectA ) target; //添加错误信息 会将错误信息反馈到 BindingResult 中 errors.rejectValue("CODE","VALUE"); } }
三、读取错误信息方式:
可以使用以下方法读取BindingResult 中的错误信息。
for (ObjectError error : bindingResult.getAllErrors()) { System.out.println(error.getCode()); } *注:BindingResult 必须定义为Controller中方法的最后 一个参数。
相关推荐
Spring Validator验证是Spring MVC框架中的一个关键特性,用于在服务器端对用户输入数据进行校验。在Spring MVC 3.0版本中,引入了注解驱动的验证方式,极大地简化了验证逻辑,使得开发者能够更加方便地处理表单数据...
对于验证,Spring MVC提供了BindingResult和Validator接口,用于校验模型数据的正确性。 另外,Spring MVC与Spring框架的其他组件无缝集成,如Spring AOP(面向切面编程)用于实现日志、事务管理等功能,Spring ...
除此之外,Spring MVC还支持数据绑定、验证、本地化、主题、异常处理等功能。例如,使用@ModelAttribute注解可以将请求参数绑定到Controller方法的参数上,@Valid用于进行数据验证,Validator接口可以自定义验证逻辑...
总的来说,"Mastering Spring MVC 4(2015.09)源码"提供了深入学习Spring MVC的机会,你可以通过阅读和分析源码来了解如何配置DispatcherServlet、怎样编写控制器、如何进行数据绑定与验证,以及如何利用拦截器等特性...
11. **Validation**:Spring提供了数据验证机制,可以通过`@Valid`注解和Validator接口实现对表单数据的校验。 12. **Interceptor**:拦截器,允许在请求处理前后执行自定义逻辑,如日志记录、权限检查等。 13. **...
Spring MVC可以通过自定义Validator或使用JSR-303/JSR-349 Bean Validation进行验证。同时,安全方面需要考虑防止SQL注入和XSS攻击。 7. **视图解析器**:设置ViewResolver,如InternalResourceViewResolver,用来...
此外,@Valid用于验证模型数据,配合Validator接口实现自定义校验规则。 7. **异常处理** 可以使用@ControllerAdvice和@ExceptionHandler全局处理异常,为整个应用提供统一的错误页面或提示。 8. **拦截器...
10. **Validation API和Hibernate Validator**:用于数据验证,可以确保用户输入的有效性。 11. **Thymeleaf或FreeMarker**:作为视图解析引擎,可以将模型数据渲染成HTML页面。Spring MVC默认支持多种视图解析技术...
要在Resin中启用Hibernate Validation,需要在应用中包含Hibernate Validator库,并在相应的配置文件(如web.xml或Spring配置文件)中配置验证规则。 在Resin-4.0.61压缩包中,包含了Resin服务器的所有必要组件和...
Spring MVC支持使用`@Valid`和自定义Validator实现数据验证。在登录场景中,可以验证用户名和密码是否为空,或者是否满足特定格式。 8. **视图解析** 登录成功后,Controller会返回一个视图名,如"success"。...
这包括Spring MVC本身、Bean Validation实现(如Hibernate Validator)、以及可能的视图技术库。 9. **学习资源**: 这个实例是一个很好的学习资源,可以帮助初学者理解如何在实际项目中集成和使用Spring MVC的...
7. **验证**:使用Hibernate Validator或Spring的Validator接口,可以在控制器方法执行前验证模型数据。 8. **异常处理**:通过@ControllerAdvice和@ExceptionHandler注解,可以全局地处理异常,提供统一的错误页面...
本章主要探讨的是如何在Spring MVC中实现对请求参数的有效性和正确性进行验证,确保应用的数据安全和业务流程的顺畅。以下将详细讲解各个知识点: 1. **简单数据类型绑定**: 在Spring MVC中,对于如int、String等...
12. **validation-api.jar** 和 **hibernate-validator.jar**:用于执行Bean Validation,提供了数据验证的API和实现,确保输入数据的正确性。 在搭建Spring MVC项目时,根据实际需求,可能还需要添加其他的库,如...
7. **数据绑定与表单验证**:Spring MVC如何自动将表单数据绑定到模型对象,以及使用Hibernate Validator进行验证。 8. **异常处理**:配置全局异常处理器,处理应用程序可能出现的各种错误和异常。 9. **RESTful...
5. **数据验证**:使用Hibernate Validator或其他验证框架进行输入验证。 五、Spring MVC 实战案例 1. **Hello World**:创建第一个Spring MVC项目,实现简单的“Hello, World!”展示。 2. **表单提交**:处理POST...
- 数据绑定和验证,如@ModelAttribute和Validator的使用。 - 异常处理,全局异常处理器GlobalExceptionResolver的设置。 - 性能优化,如开启HTTP缓存、减少视图解析时间等。 5. **面试常见问题** - Spring MVC...
同时,利用@Valid和Validator进行表单验证,保证数据的准确性和完整性。 6. **MVC拦截器**: 拦截器允许在请求处理前后执行自定义逻辑,如权限检查、日志记录等。 7. **异常处理**: 通过@ControllerAdvice和@...
Spring MVC 提供了两种主要的数据验证方式:一种是基于JSR 303/349的Bean Validation,另一种是基于Validator接口的自定义验证。 1. **Bean Validation**:这是一个标准的Java Bean数据验证框架,它定义了一组注解...
10. **验证**:Spring MVC 结合 `Hibernate Validator` 提供了表单验证功能,可以使用 `@Valid` 和 `BindingResult` 进行校验。 11. **RESTful 风格**:通过 `@RestController` 注解和 HTTP 方法注解(`@GetMapping...