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

@ModelAttribute值在验证错误时不可用

是指在使用Spring MVC框架进行表单验证时,当验证失败时,无法获取到@ModelAttribute注解修饰的方法参数的值。

@ModelAttribute注解用于将请求参数绑定到方法参数或模型属性上。在Spring MVC中,当处理表单提交时,框架会自动进行数据绑定和验证。如果验证失败,框架会将错误信息返回给前端页面,但此时@ModelAttribute注解修饰的方法参数的值将不可用。

这是因为Spring MVC的验证是在数据绑定之后进行的,而@ModelAttribute注解的方法参数是在数据绑定之前进行赋值的。当验证失败时,框架会直接返回错误信息,而不会再次执行数据绑定过程,因此@ModelAttribute注解修饰的方法参数的值无法获取。

解决这个问题的方法是使用BindingResult参数来接收验证结果,并手动处理验证错误。BindingResult是Spring MVC提供的一个用于封装验证结果的对象。通过在方法参数中添加BindingResult参数,可以获取到验证失败的详细信息,包括错误字段和错误消息。

以下是一个示例代码:

代码语言:txt
复制
@PostMapping("/submitForm")
public String submitForm(@ModelAttribute User user, BindingResult bindingResult) {
    // 手动进行数据验证
    UserValidator validator = new UserValidator();
    validator.validate(user, bindingResult);

    // 如果验证失败,处理错误信息
    if (bindingResult.hasErrors()) {
        // 获取错误字段和错误消息
        List<FieldError> errors = bindingResult.getFieldErrors();
        for (FieldError error : errors) {
            System.out.println("错误字段:" + error.getField());
            System.out.println("错误消息:" + error.getDefaultMessage());
        }
        // 返回错误页面或错误信息
        return "error";
    }

    // 验证通过,继续处理业务逻辑
    // ...

    return "success";
}

在上述代码中,我们手动进行数据验证,并通过BindingResult参数获取验证结果。如果验证失败,我们可以获取到错误字段和错误消息,并进行相应的处理。如果验证通过,我们可以继续处理业务逻辑。

推荐的腾讯云相关产品:腾讯云云服务器(https://cloud.tencent.com/product/cvm)

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

相关·内容

表单数据回显

默认情况 POJO数据传入controller方法后, springMvc自动将POJO数据放到request域, key等于POJO类的首字母小写   ** 实验:   (1) 商品名称填的情况下..., 点击"提交"按钮, 其他数据仍在[注意, POJO类:ItemsCustom, jsp页面取值形式:value="${itemsCustom.name }"]   (2) 修改Handler的响应...非默认情况下的数据回显解决方法   插入一个知识点: @ModelAttribute这个注解还可以将方法的返回响应到页面 Handler代码: 1 // 模拟@ModelAttribute注解将方法的返回响应到页面的试验...type.key }">${type.value } 5 6 7 运行: 因此, 做一个实验: 注明(静态数据)  "...提交"按钮对应的Handler方法中, 添加注解@ModelAttribute("items"),  里面的key, 刚好是jsp页面用于取值的key, 这时候可以进行数据回显 除此之外, 对于数据回显

1.2K10
  • 从原理层面掌握@ModelAttribute的使用(核心原理篇)【享学Spring MVC】

    众多的注解使用中,Spring MVC中有一个非常强大但几乎被忽视的一员:@ModelAttribute。...它既可以标注方法入参上,也可以标注方法(返回)上。 但是请注意,当请求处理导致异常时,引用数据和所有其他模型内容对Web视图不可用,因为该异常随时可能引发,使Model内容不可靠。...// @since 4.3 boolean binding() default true; } 基本原理 我们知道@ModelAttribute能标注入参上,也可以标注方法上。...管理着Model,提供了@ModelAttribute以及@SessionAttributes等对它的影响 同时@ModelAttribute可以标注入参、方法(返回)上的,标注不同地方处理的方式是不一样的...解析@ModelAttribute注解标注的方法参数,并处理@ModelAttribute标注的方法返回

    1.3K10

    Spring MVC框架:第十三章:类型转换

    1.使用SpringMVC内置的类型转换器 ①配置MVC注解驱动 ②需要进行转换的字段上标记特定的注解 @DateTimeFormat(pattern...birthday; @NumberFormat(pattern="#,###,###.#") private double salary; 2.转换失败后处理 ①BindingResult SpringMVC捕获到类型转换失败错误时会将相关信息封装到...//Return if there were any errors. boolean hasErrors(); handler可以通过hasErrors()方法判断是否有错误。...②页面显示 [1]要借助SpringMVC的form:form标签 [2]form:form标签中要明确指定modelAttribute属性。...[3]使用form:errors标签,通过path属性指定要显示错误消息的属性名 页面上结合SpringMVC的表单标签显示错误消息 <form:form modelAttribute="employee

    20740

    SHFileOperation函数使用的介绍

    (Win7实际中貌似不可用) FOF_NOERRORUI 0×0400 如果设置了这个标志,任何发生的错误都不能使消息框显示,而是程序中返回错误码。...SHFileOperation()函数的返回 MSDN资料中说明,SHFileOperation()成功时返回0,失败时返回非0。显然这是真的,但并不是最有用的解释。...7 询问是否想要置换给定文件时,你回答了‘取消’,函数就返回这个错误码。它的描述也是相当的不明确—存储控制块被销毁。 115 试图重命名文件到不同的文件夹时,发生这个文件系统。...117 一个IOCTL(输入/输出控制),目的路径中有错误时或取消了新目录的建立时,这个错误发生了。 123 你正在试图重命名一个文件,然而你给出的名字是一个已经存在的文件。...1026 试图移动或拷贝一个不存在的文件时,出现这个文件系统。一般地,它提示了,源缓冲中的某些东西应该修改一下。

    74210

    SpringMVC扩展(一)

    modelAttribute 提供一个属性, modelAttribute 提交时也把表单的数据 返回控制器;... --> <fm:form action="upd"...model中不存在 modelAttribute="属性名" 自动以属性名为名,提交时候把表单的都放进入,发送至控制器; --> <...一般都是在前端 进行JS 表单验证; 而 一直没有加入 "服务器端的数据验证" SpringMVC中有两种方式可以进行 数据验证: 利用Spring自带的验证框架 fm 利用JSR 303 实现; (一般都搭配...JSR 303:Java为Bean数据合法性校验所提供的标准框架 Spring MVC支持JSR 303标准的校验框架 JSR 303通过Bean属性上标注校验注解指定校验规则,并通过标准的验证接口对...,其必须在可接受的范围内 @Past 被注释的元素必须是一个过去的日期 @Future 被注释的元素必须是一个将来的日期 继续刚才的Demo 加一个新增 表单验证; 修改实体类; User.java

    10810

    spring和springboot常用注解_Java常用注解

    (1)对方法使用 @ModelAttribute 注解: 注解方法上的@ModelAttribute说明了方法的作用是用于添加一个或多个属性到model上。...@ModelAttribute 方法会先被调用。 同一个控制器中,注解了@ModelAttribute的方法实际上会在@RequestMapping方法之前被调用。...(2)@ModelAttribute 和 @RequestMapping 注解同一个方法上 如果 @ModelAttribute 和 @RequestMapping 注解同一个方法上,那么代表给这个请求单独设置...(3)方法参数上使用 @ModelAttribute 注解 ① 数据绑定 注解方法参数上的@ModelAttribute说明了该方法参数的将由model中取得。...② 和 BindingResult 配合使用 使用 @ModelAttribute 进行数据绑定之后,可以使用 BindingResult 来返回数据验证结果。

    73520

    注解 @ModelAttribute 运用详细介绍

    (1)@ModelAttribute注释void返回的方法 1 @Controller 2 public class HelloWorldController { 3 @ModelAttribute...abc=text)加入到一个名为attributeName的model属性中,它执行后 helloWorld被调用,返回视图名helloWorld和model已由@ModelAttribute方法生产好了...Model属性名称有@ModelAttribute(value=””)指定,相当于request中封装了key=attributeName,value=hi。 2....public @ModelAttribute("user2") UserModel test3(@ModelAttribute("user2") UserModel user)   大家可以看到返回类型是命令对象类型...,而且通过 @ModelAttribute("user2") 注解,此时会暴露返回到模型数据( 名字为user2 ) 中供视图展示使用    @ModelAttribute 注解的返回会覆盖 @RequestMapping

    1.1K10

    springmvc 注解总结

    4、@ModelAttribute ModelAttribute可以应用在方法参数上或方法上,他的作用主要是当注解方法参数上时会将注解的参数对象添加到Model中;当注解在请求处理方法Action上时会将该方法变成一个非请求处理的方法...实际上,控制器中的@ModelAttribute方法是同一控制器中的@RequestMapping方法被调用之前调用的。...我们可以需要访问 Session 属性的 controller 上加上 @SessionAttributes,然后 action 需要的 User 参数上加上 @ModelAttribute,并保证两者的属性名称一致...故如用户身份验证对象的session一般不用它来实现,还是用session.setAttribute等传统的方式实现。...一般异步获取数据时使用,使用@RequestMapping后,返回通常解析为跳转路径,加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body

    43910

    短信验证码爆破

    0x01 漏洞描述 - 短信验证码爆破 - 短信验证码一般由4位或6位数字组成,若服务端未对验证时间、次数进行限制,则存在被爆破成功的可能性。...0x02 漏洞等级 威胁级别 高危 中危 低危 0x03 漏洞验证 输入手机号获取验证码,再输入任意验证并抓取请求数据包。...根据验证码请求的返回的内容或者数据包长度可以判断验证码是否匹配成功,当验证码匹配错误时统一返回包长度440,当验证码匹配正确时返回包长度为436。...由于系统没有对提交验证码错误次数做任何限制,因此可以对验证码参数值进行无限枚举,直至爆破匹配成功。 0x04 漏洞修复 每次生成新验证码时,统一设置验证码的有效时间,验证码仅在限定时间内有效。...设置验证码输入错误次数限制,例如:每输3次验证码,必须作废并要求生成新验证码。 避免使用简单验证码。

    12.1K20

    springmvc常用注解总结(面试经常问)

    这两个对象参数必须紧接在需要验证的实体对象参数之后,它里面包含了实体对象的验证结果。 支持的返回类型 (1 )一个包含模型和视图的ModelAndView 对象。...这个时候如果需要在渲染视图的过程中需要模型的话就可以给处理器方法一个模型参数,然后方法体里面往模型中添加值就可以了。 (5 )返回是void 。...(7 )除以上几种情况之外的其他任何返回类型都会被当做模型中的一个属性来处理,而返回的视图还是由RequestToViewNameTranslator 来决定,添加到模型中的属性名称可以该方法上用@ModelAttribute...@ModelAttribute和 @SessionAttributes @ModelAttribute作用于方法上:就是向model中set,但是@ModelAttribute注释的方法会在此controller...如果@ModelAttribute()未指定key,则key默认为方法返回类型名称的首字母小写形式 @ModelAttribute作用于参数上:从model中get并绑定到参数上。

    23910

    springmvc常用注解总结

    这两个对象参数必须紧接在需要验证的实体对象参数之后,它里面包含了实体对象的验证结果。 支持的返回类型 (1 )一个包含模型和视图的ModelAndView 对象。...这个时候如果需要在渲染视图的过程中需要模型的话就可以给处理器方法一个模型参数,然后方法体里面往模型中添加值就可以了。 (5 )返回是void 。...(7 )除以上几种情况之外的其他任何返回类型都会被当做模型中的一个属性来处理,而返回的视图还是由RequestToViewNameTranslator 来决定,添加到模型中的属性名称可以该方法上用@ModelAttribute...@ModelAttribute和 @SessionAttributes @ModelAttribute作用于方法上:就是向model中set,但是@ModelAttribute注释的方法会在此controller...如果@ModelAttribute()未指定key,则key默认为方法返回类型名称的首字母小写形式 @ModelAttribute作用于参数上:从model中get并绑定到参数上。

    14730

    SHFileOperation DeleteFolder

    (Win7实际中貌似不可用) FOF_NOERRORUI 0x0400 如果设置了这个标志,任何发生的错误都不能使消息框显示,而是程序中返回错误码。...SHFileOperation()函数的返回 MSDN资料中说明,SHFileOperation()成功时返回0,失败时返回非0。显然这是真的,但并不是最有用的解释。...7 询问是否想要置换给定文件时,你回答了‘取消’,函数就返回这个错误码。它的描述也是相当的不明确—存储控制块被销毁。 115 试图重命名文件到不同的文件夹时,发生这个文件系统。...117 一个IOCTL(输入/输出控制),目的路径中有错误时或取消了新目录的建立时,这个错误发生了。 123 你正在试图重命名一个文件,然而你给出的名字是一个已经存在的文件。...1026 试图移动或拷贝一个不存在的文件时,出现这个文件系统。一般地,它提示了,源缓冲中的某些东西应该修改一下。

    87220

    SpringMVC(一)

    表示默认,即若不是必须属性没有填写的情况下会以此代替 举例 ?...则 objectName 为类名第一个字母小写 注意:attrName,若目标方法的 POJO 属性使用了 @ModelAttribute 修饰,则 attrName 为 @ModelAttribute...的 value 属性 确定 target 属性 implicitModel 中查找 attrName 对应的属性,若存在 Ok 若不存在,则验证当前 Handler 是否使用了 @SessionAttributes...若使用了 @ModelAttribute 来修饰,则 key 为 @ModelAttribue 注解的 value 属性 implicitModel 中查找 key 对应的对象,若存在,则作为入参传入...若在 @ModelAttribute 标记的方法中 Map 中保存过,且 key 和上一步确定的 key 一致,则会获取到 若 implicitModel 中不存在 key 对应的对象,则检查当前的

    67420

    form标签

    Form 标签的作用第一是它会自动的绑定来自 Model 中的一个属性到当前 form 表单对应的实体对象,第二是它支持我们提交表单的时候使用除 GET 和 POST 之外的其他方法进行提交,包括...:input path="age"/>启动工程发送请求,效果图如下所示:图片在来看看指定在 Model 中存储的名称为 command 这个 key 来验证一下他会自动的去找一个叫做...username"/> 年龄:这个时候重启工程再次发送请求,效果图如下所示:图片再来验证一下当找不到的时候...result.jsp 内容如下所示,也就是不知道 modelAttribute 属性,而我把存储 Model 中的 key 改为了 user,那么我在这里又不指定 key 他找 command key...中肯定没有想要的就会报错,启动工程运行效果图如下所示:图片SpringMVC 提供的标签,对应单选,下拉框会根据对应的进行选中例如性别单选按钮,你的为 0,他就会自动的帮你选中 radio 的那个按钮

    14310
    领券