springmvc项目使用@Valid+BindingResult遇到的问题

针对“springmvc项目使用@Valid+BindingResult遇到的问题”,我提供以下完整攻略:

1. 理解问题

经过实践和研究,我们发现当使用@ValidBindingResult配合进行表单数据校验时,有时会遇到一些问题。

问题的根本原因在于BindingResult的处理方式与我们期望的不太一样,它不会使@Valid注解的校验失败,而是将校验结果存储在自己的对象中,因此我们需要强制判断BindingResult对象中是否存在校验错误。

在这个问题的基础上,我将为您提供两个示例以更全面地理解问题和解决方案。

2. 示例一

User类为例:

public class User {
    @NotNull(message="用户名不能为空")
    private String username;
    @NotNull(message="密码不能为空")
    private String password;
}

我们期望对该类进行表单数据校验。

Controller中,我们使用@Valid注解进行校验:

@RequestMapping("/login")
public String login(@Valid User user, BindingResult result) {
    if (result.hasErrors()) {
        return "error";
    }
    //根据用户输入执行登录代码
    return "success";
}

但是在表单提交时,即使输入为空,也不会返回"error",而是直接进入success页面。

出现这种情况的原因是,BindingResult对象不会使@Valid注解的校验失败,而只是将User对象中的值进行校验,并将结果保存在BindingResult对象中。因此,我们需要修改Controller中的代码,将if语句中的条件改为:

if (result.hasErrors()&&(user!=null)) {
    return "error";
}

即判断result.hasErrors()是否为true,并且user对象是否不为空。这里需要注意的细节是,必须先判断result.hasErrors()是否为true,否则当user对象为null时,result.hasErrors()也会返回true,从而导致代码逻辑错误。

3. 示例二

Address类为例:

public class Address {
    @NotNull(message="城市不能为空")
    private String city;
    @NotNull(message="街道不能为空")
    private String street;
}

我们期望对该类进行表单数据校验,但实际上会遇到NullpointerException错误:

@RequestMapping("/address")
public String address(@Valid Address address, BindingResult result) {
    if (result.hasErrors()) {
        return "error";
    }
    //根据用户输入执行查询地址代码
    return "success";
}

在该代码中,如果用户提交的表单数据中,citystreet其中一项为空,将会执行result.hasErrors(),从而返回"error"。但是,如果用户提交的表单数据中,address为空,将会出现NullpointerException错误。

这是因为BindingResult在未能把校验结果存储到Address对象中时,把Address对象设置为了null,导致在if (result.hasErrors())中抛出NullpointerException异常。因此,我们需要修改address方法中的代码,将if语句中的条件改为:

if ((address==null)||result.hasErrors()) {
    return "error";
}

在这里,我们先判断address对象是否为空,如果为空,直接返回"error";否则再判断result.hasErrors()是否为true,从而返回正确的校验结果。

4. 总结

针对“springmvc项目使用@Valid+BindingResult遇到的问题”,我们提供了以下攻略:

  • 理解BindingResult处理方式的不同,正确判断校验结果;
  • 通过以上两个示例,全面了解问题的详细情况和解决方案。

希望这些内容能够对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springmvc项目使用@Valid+BindingResult遇到的问题 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 宝塔面板配置及部署javaweb教程(全网最全)

    宝塔面板配置及部署javaweb教程(全网最全) 本教程介绍如何使用宝塔面板快速配置及部署javaweb应用。 步骤一:安装宝塔面板 访问宝塔官网[https://www.bt.cn/],下载适用于您服务器系统的安装包。 将下载好的安装包上传到服务器,执行安装命令。 按照提示进行安装即可。 步骤二:添加网站 登录到宝塔面板后台。 点击左侧导航栏中的“网站”,…

    Java 2023年5月19日
    00
  • jQuery实现级联下拉框实战(5)

    以下是“jQuery实现级联下拉框实战(5)”的详细攻略: 一、概述 本篇文章是“jQuery实现级联下拉框实战”系列的第五篇,将会探讨如何使用jQuery实现级联下拉框。 在本篇文章中,我们将会实现对于多个级别的下拉框进行级联操作,以此来实现彼此之间的联动。并且,我们将会使用Ajax的方式来获取下一级的选项内容。 二、实现步骤 本文主要分为以下几个步骤来实…

    Java 2023年6月15日
    00
  • HttpServletResponse乱码问题_动力节点Java学院整理

    关于“HttpServletResponse乱码问题_动力节点Java学院整理”的完整攻略可以分为以下几个方面进行讲解。 一、乱码原因 默认编码:HttpServletResponse对象默认的编码格式是ISO-8859-1,而不是UTF-8。 设置编码:如果请求和响应的编码不匹配,则会出现乱码。 二、解决方案 设置响应头的字符集:可以使用setCharac…

    Java 2023年5月20日
    00
  • Java实现非阻塞式服务器的示例代码

    实现非阻塞式服务器可以提高服务器的并发处理能力。下面是一个Java实现非阻塞式服务器的示例代码的攻略。 1. 了解非阻塞式服务器 非阻塞式服务器是指服务器可以在不影响其他请求的情况下,同时处理多个连接请求。在实现非阻塞式服务器时,可以使用Java NIO(New I/O)框架提供的非阻塞I/O机制。与传统的阻塞I/O不同,非阻塞I/O中的请求不必在服务器完全…

    Java 2023年6月1日
    00
  • 一文带你搞懂Spring响应式编程

    一文带你搞懂Spring响应式编程 Spring 是一个流行的框架,它可以帮助我们构建各种类型的应用程序,包括 Web 应用程序、RESTful APIs、消息传递应用程序等,同时它也可以用于响应式编程。响应式编程是一种编程模型,可以在程序的不同部分之间传递异步数据流,使其更具可伸缩性和弹性。为了帮助大家更好地理解 Spring 响应式编程,我们提供了以下详…

    Java 2023年5月19日
    00
  • java8 LocalDate LocalDateTime等时间类用法实例分析

    Java8 时间类用法实例分析 Java8中引入了全新的日期和时间API,其中包括了多个专门用于处理日期和时间的类。本文将深入介绍几个常用的时间类及其用法实例。 1. LocalDate LocalDate 表示不带时区的日期,它的常用方法有: now():获取当前日期 getYear():获取当前日期的年份 getMonth():获取当前日期的月份 get…

    Java 2023年5月20日
    00
  • Spring Boot打包部署和环境配置详解

    SpringBoot打包部署和环境配置详解 SpringBoot是一种快速开发框架,可以帮助我们快速构建Web应用程序。本文将详细讲解SpringBoot打包部署和环境配置的完整攻略,并提供两个示例。 1. 打包SpringBoot应用程序 在SpringBoot中,我们可以使用Maven或Gradle来打包应用程序。以下是一个简单的Maven示例: &lt…

    Java 2023年5月15日
    00
  • Java Tomcat 启动闪退问题解决集

    Java Tomcat 启动闪退问题解决集 问题描述 在使用Java Tomcat时,有时会出现启动后闪退的问题。这个问题十分棘手,让人头疼。本文将从几个方面介绍如何解决这个问题。 解决方法 方法一:配置config文件 步骤1:打开Tomcat的config文件夹 打开Tomcat的安装目录下的conf文件夹,找到打开server.xml文件。 步骤2:修…

    Java 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部