首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

BindingResult/Errors没有在模型属性之后立即声明,但没有问题,为什么?

BindingResult/Errors没有在模型属性之后立即声明,但没有问题的原因是因为它们是Spring MVC框架中用于处理表单数据校验的对象。

在Spring MVC中,当表单数据提交到后端控制器时,可以使用@Valid注解对表单数据进行校验。如果校验失败,Spring MVC会将错误信息存储在BindingResult/Errors对象中,并将其作为方法参数传递给控制器方法。

通常情况下,BindingResult/Errors对象需要紧跟在被校验的模型属性之后声明,以便Spring MVC能够正确地将错误信息绑定到对应的模型属性上。但是,即使没有紧跟在模型属性之后声明,BindingResult/Errors对象仍然可以正常工作,不会影响数据校验的结果。

这是因为Spring MVC在处理表单数据校验时,会自动将BindingResult/Errors对象与前一个模型属性进行关联。它会根据对象类型进行匹配,如果找到了与之匹配的BindingResult/Errors对象,就会将错误信息绑定到该对象上。如果找不到匹配的对象,则会创建一个新的BindingResult/Errors对象,并将错误信息绑定到该对象上。

因此,即使BindingResult/Errors没有在模型属性之后立即声明,Spring MVC仍然能够正确地处理表单数据校验,并将错误信息绑定到对应的对象上。

推荐的腾讯云相关产品:腾讯云服务器(CVM)和腾讯云数据库(TencentDB)。

腾讯云服务器(CVM)是一种弹性计算服务,提供可扩展的云服务器实例,可满足不同规模和业务需求的应用场景。了解更多信息,请访问:https://cloud.tencent.com/product/cvm

腾讯云数据库(TencentDB)是一种高性能、可扩展的云数据库服务,支持多种数据库引擎,包括MySQL、SQL Server、MongoDB等。了解更多信息,请访问:https://cloud.tencent.com/product/cdb

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SpringMVC03之拦截器和JSR303

2)权限检查:如登录检测,进入处理器检测是否登录,如果没有直接返回到登录页面; 3)性能监控:有时候系统某段时间莫名其妙的慢,可以通过拦截器进入处理器之前记录开始时间,处理完后记录结束时间,...响应对象     3)handler拦截到的处理器方法     4)ModelAndView处理器方法返回的模型和视图对象,可以方法中修改模型和视图 afterCompletion方法 作用...:用于整个流程完成之后进行最后的处理,如果请求流程中有异常,可以方法中获取对象 执行时机:视图渲染完成后(整个流程结束之后) 方法参数:     1)request请求参数     2)response...:errors path="username"/> 显示特定表单对象属性的错误 delimiter:如果一个属性有多个错误,错误信息的分隔符。...默认是换行 注1:errors标签要放到form标签中才能显示错误消息 注2:如果使用form:errors标签不显示错误消息,请检查Model中是否已经添加了命令对象,没有是不会显示错误消息的 注3

41810

SpringMVC参数校验

JSR-303的简单使用 3.1 需要校验的属性上标记注解 注解有个属性message存放自定义的错误信息 public class User { @NotNull(message = "名字不能为空...errors = bindingResult.getFieldError(); // 输出message信息 return (errors.getDefaultMessage...笔者遇到的小插曲 我们知道前端传参过来都是字符串,经过Spring的类型转换器转换成为我们需要的类型才能正常使用,之前笔者没有使用JSR-303规范来校验参数的时候莫得发觉问题,这也为现在埋下了坑 如果传个整型呢...bindingResult) { if (bindingResult.hasErrors()) { FieldError errors = bindingResult.getFieldError...(); return (errors.getDefaultMessage() + "\n"); } // dosomething } 乍一看没有什么问题,普通使用能过去

1.1K10

Spring数据绑定之DataBinder篇---01

还是没有严格分层关系的模块中,某个模块需要另一个模块的功能支持,也可以向外界提供实现接口,但是该模块通过调用另一个模块完成接口的实现。...BindingResult的还扩展了Errors接口,这样可以通过Errors接口提供的方法,判断是否出现了相关异常,例如: 字段缺少错误和属性访问错误,这些错误都会被转换为FieldErrors,然后收集...public interface BindingResult extends Errors { DataBinder获取转换器的方法中,都会首先去BindingResult中获取,如果获取不到,再寻找自身默认提供的...bindingResult) { //如果出现了属性访问异常错误---拿到属性名 String field = ex.getPropertyName(); Assert.state(...= null) { validator.validate(target, bindingResult); } } } 可以看到DataBinder提供了对数据校验的支持,但是我们并没有

51130

Spring官网阅读(十七)Spring中的数据校验

的基础上实现了InitializingBean,Bean初始化时调用,用于给上面三个属性进行配置 @Override public void afterPropertiesSet() { if...如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中,是一个标记注解,没有成员。...CONSTRUCTOR, PARAMETER, TYPE_USE }) @Retention(RUNTIME) @Documented public @interface Valid { //没有提供任何属性...注解中的属性不同,@Validated注解中可以提供一个属性去指定校验时采用的分组,而@Valid没有这个功能,因为@Valid不能进行分组校验 我相信通过这个方法的记忆远比看博客死记要好~ ” 实际生产应用...可以发现,错误信息已经被封装到了BindingResult,通过BindingResult我们能对错误信息进行自己的处理。

1.8K51

Spring MVC-07循序渐进之验证器 上 (Spring自带的验证框架)

MVC应用程序中,它们将String转换或者格式化成另外一种Java类型,比如java.util.Date. 验证器则作用于object级。...validate方法会验证目标对象,并将验证错误填入Errors对象 Errors对象是org.springframework.validation.Errors接口的一个实例,包含了一系列FieldError...大多数时候,只给reject或者rejectValue方法传入一个错误码,Spring就会在属性文件中查找错误码没回去相应的错误消息, 还可以传入一个默认的消息,当没有找到指定的错误码时,就会使用默认消息...Errors对象中的错误消息可以利用表单标签库的Errors标签显示页面中, 错误消息可以通过Spring支持的国际化特性本地化。...---- 源文件 验证器不需要显式注册,但是如果想从某个属性文件中获取错误消息,则需要通过声明messageSourceBean,告诉Spring去哪里查找这个文件 完整的SpringMVC的配置文件如下

59520

@Validated注解和@Valid注解区别

@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上 @Validated:提供了一个分组功能,可以入参验证时,根据不同的分组采用不同的验证机制 @Validated:可以用在类型、方法和方法参数上...但是不能用在成员属性(字段)上 两者是否能用于成员属性(字段)上直接影响能否提供嵌套验证的功能 显然@Valid注解可以提供嵌套校验的功能 @Validated除了没有嵌套校验的功能只能,其他@Valid...对象,来封装校验结果 也可以跟一个Errors对象,因为BindingResult继承至Errors对象 @RestController public class UserController {...setter方法注入进去的,只有配置文件中声明属性,才回去调用对应的配置类中属性的setter方法进行赋值操作,这个时候才会进行数据校验,因此如果没有配置文件中声明属性,那么其对应的setter...方法不会被调用,自然也就不会进行数据校验 所以上面的peo的name属性的setter方法没有被调用,自然也就不会进行name属性的校验 @Valid注解没有对配置类和配置文件绑定属性进行校验的功能

1.2K20

一文弄懂spring validate​

实现方式和使用方式:一般使用较多的是两个注解:@Validated、@Valid 第一种使用方式:使用Validator,利用BindingResult获取Errors信息 第二种使用方式:采用@Valid...@Constraint注解声明约束及其可配置属性,同时在对应的真实注解处理类TimeValidator里面,真实注解类里面可以随意的注入需要的bean(AutoWired等) 注意上面注意除开value...建议一个类中坚持使用字段 或属性注释。不建议对字段和随附的getter方法进行注释*,*因为这将导致对该字段进行两次验证。...传递给定约束声明的约束注释。 保证使用此实例进行验证之前调用此方法。 默认的实现是no-op。...考虑bean X包含一个类型为Y的字段的情况,通过使用@Valid注释字段Y,验证器将在验证X时验证Y(及其属性)。 类型Y(子类,实现)声明的字段中包含的值的确切类型Z是在运行时确定的。

3.1K31

Spring MVC框架:第十四章:数据校验

JSR 303通过Bean 属性上标注类似于@NotNull、@Max等标准的注解指定校验规则,并通过标准的验证接口对Bean进行验证。 JSR 303只是一套标准,需要提供其实现才可以使用。...Spring本身并没有提供JSR 303的实现,所以必须将JSR 303的实现者的jar包放到类路径下。...@NotEmpty private String empName; ③目标方法的bean前添加@Validated注解 ※注意:@Validated注解修饰的bean之后, 紧跟Errors(或BindingResult...@Validated注解修饰的bean和Errors参数之间不能再有其他的参数!...④调用hasErrors()方法目标方法中检验是否没有通过验证 //检测是否存在“数据绑定”错误 boolean hasErrors = bindingResult.hasErrors

36830

聊聊Spring中的数据绑定 --- DataBinder本尊(源码分析)【享学Spring】

=org.springframework.validation.BeanPropertyBindingResult: 0 errors} 其实Spring一直是弱化数据绑定对使用者的接触(这就是为何鲜有人提起的原因...首先看看类声明: public class DataBinder implements PropertyEditorRegistry, TypeConverter {} 它是个实现类,直接实现了PropertyEditorRegistry...checkAllowedFields(mpvs); checkRequiredFields(mpvs); applyPropertyValues(mpvs); } // allowe允许的 并且还是没有...里也能拿到最终值哦~~~) // 此方法可以调用,一般较少使用~ public Map<?...spring-context这个工程的org.springframework.validation包内,所以需要再次明确的是:它是Spring提供的能力而非web提供的~ 虽然我们DataBinder是Spring提供,其实把它发扬光大是发生在

84630

教你使用它完成Controller参数校验(含级联属性校验)以及原理分析【享学Spring】

Controller就是方法级别的,所以它就是直接应用了方法级别的校验而已嘛~对于此疑问我先不解答,而是顺势再抛出两个问题你自己应该就能想明白了: 上文有说过,基于方法级别的校验Spring默认是并未开启的,但是为什么...哪怕你用的传统Spring MVC你会发现也是直接可用的,不信你就试试 类比一下:Spring MVC的HandlerInterceptor是AOP思想的实现,你有没有发现即使你没有启动@EnableAspectJAutoProxy...毕竟:永远相信本文能给你带来意想不到的收获~ 使用示例 关于数据校验这一块Spring MVC中的使用案例,我相信但凡有点经验的Java程序员应该没有不会使用的,并且还不乏熟练的选手。...个人直接建议使用@Validated即可,而去使用@Valid了,更不用自己给自己找麻烦去自定义注解啥的了~ 只有当Errors(BindingResult)入参是是仅跟着@Valid注解的实体,Spring...@Valid可以用在属性级别约束,用来表示级联校验。

3.2K42
领券