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日

相关文章

  • Flex与.NET互操作 使用FileReference+HttpHandler实现文件上传/下载

    Flex与.NET互操作 使用FileReference+HttpHandler实现文件上传/下载 概述 本文主要介绍如何通过Flex和.NET相互配合,实现文件上传/下载。 在介绍具体步骤之前,先简单介绍FileReference和HttpHandler。 FileReference是Flex中处理文件上传/下载的类,使用FileReference类可以实…

    Java 2023年6月15日
    00
  • spring boot使用thymeleaf模板的方法详解

    下面为您提供《Spring Boot使用Thymeleaf模板的方法详解》的完整攻略。 1. Thymeleaf简介 Thymeleaf是一种现代的服务器端Java模板引擎,可以构建HTML、XML、JavaScript、CSS或文本输出。它旨在与Spring框架完全集成,但可以用于处理任何Web和非Web应用程序开发的模板需要。 2. Spring Boo…

    Java 2023年6月15日
    00
  • 深入理解springMVC中的Model和Session属性

    在Spring MVC中,Model和Session属性是常用的数据传递方式。Model属性用于在请求处理期间传递数据,而Session属性用于在多个请求之间传递数据。下面是深入理解Spring MVC中的Model和Session属性的完整攻略: Model属性 1. Model属性的作用 Model属性用于在请求处理期间传递数据。在Spring MVC中…

    Java 2023年5月18日
    00
  • JAVA程序员不得不留意的编码规范

    下面我将为您详细讲解“Java程序员不得不留意的编码规范”的完整攻略。 1. 编码规范的重要性 编码规范是一种旨在保证程序员编写的代码风格统一规范,提高代码的可读性和可维护性的编码习惯。良好的编码规范不仅可以改善代码质量,使代码更加规范化,提高代码可读性和可维护性,还可以提高代码重用性和移植性,减少程序出错率,有利于团队协作。而采用不规范化的编码规范可能会产…

    Java 2023年5月20日
    00
  • 详解Spring与Mybatis的整合方法(基于Eclipse的搭建)

    下面是详细讲解“详解Spring与Mybatis的整合方法(基于Eclipse的搭建)”的完整攻略。 准备工作 首先要确保Eclipse中已经安装好Spring和Mybatis的插件(可以在“Marketplace”中搜索安装)。然后需要准备好数据库和相关的配置文件。 整合步骤 新建Maven项目,选择需要的包和依赖。 新建数据库,在Mybatis的配置文件…

    Java 2023年5月19日
    00
  • IDEA 连接数据库的实现方法

    下面是“IDEA 连接数据库的实现方法”的完整攻略及示例说明。 1. 使用JDBC连接数据库 1.1 引入JDBC依赖 在Maven的pom.xml文件中,添加MySQL或其他数据库的JDBC依赖。 例如,在连接MySQL时,可以添加如下依赖: <dependency> <groupId>mysql</groupId> &…

    Java 2023年6月1日
    00
  • Spring Data Exists查询最佳方法编写示例

    下面是完整攻略,包含两条示例: 背景 在开发中,我们时常需要查询某个实体是否在数据库中存在。对于这种查询,我们可以采用多种方式实现,但是存在一些别出心裁的方式可以执行此操作。 最佳方法——使用Spring Data的Exists方法 Spring Data JPA 提供了一个快捷方法,使我们可以很容易地查询实体是否存在: boolean existsById…

    Java 2023年5月20日
    00
  • 谈谈Spring Boot 数据源加载及其多数据源简单实现(小结)

    这篇攻略解释了如何在Spring Boot中加载数据源,并提供了实现多数据源的简单示例。 一、Spring Boot加载数据源的基本原理 Spring Boot中加载数据源的方式是通过自动配置。根据应用程序的classpath路径以及类路径上的标记,Spring Boot会自动配置适当的数据源,如果没有其他配置,将选择一个默认情况下适合多数场景的数据源。 在…

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