使用BindingResult 自定义错误信息

下面是关于使用BindingResult自定义错误信息的完整攻略。

一、BindingResult简介

在Spring MVC框架中,接受前端数据的方法一般会使用@ModelAttribute或@RequestBody注解对参数进行声明,此时也可以添加BindingResult类型的参数,用于接收数据绑定时产生的错误信息。

BindingResult是Spring MVC框架中一个关于数据绑定的验证结果类。它和Errors一样,都是在数据绑定的过程中出现错误时保存错误信息的。BindingResult承载的是与Model相关的数据验证结果,而Errors是完全与验证结果无关的。

二、使用BindingResult自定义错误信息

2.1 错误信息的定义

在使用BindingResult自定义错误信息时,我们需要定义一个ErrorInfo类,来存储错误信息的字段和对应的错误代码。例如:

public class ErrorInfo {
    private String field;
    private String message;
    private String code;

    // getter和setter方法
}

在这个ErrorInfo类中,我们定义了三个字段:field代表错误字段,message代表错误信息,code代表错误代码。

2.2 核心代码

在使用BindingResult自定义错误信息时,主要需要对BindingResult进行判断和处理。例如我们收到了一个name字段,需要检查它是否为空。

@PostMapping("/demo")
@ResponseBody
public ErrorInfo demo(@RequestBody @Validated DemoEntity demo, BindingResult bindingResult) {
    ErrorInfo errorInfo = new ErrorInfo();

    if (bindingResult.hasErrors()) {
        // 打印错误信息
        List<ObjectError> errors = bindingResult.getAllErrors();
        String error = errors.stream().map(ObjectError::getDefaultMessage).collect(Collectors.joining(","));
        log.error(error);

        errorInfo.setCode("200002");
        errorInfo.setMessage(error);
        return errorInfo;
    }

    return null;
}

在这段代码中,我们使用了@RequestBody注解来接收前端的数据,在数据绑定的过程中,会自动根据实体类的信息进行数据类型转换。

使用@Validated注解开启数据的验证功能,如果数据验证出现错误,则会通过BindingResult对象保存相关信息。我们在方法中,通过判断BindingResult对象中是否存在错误来决定如何进行下一步操作。

如果存在错误,我们首先将错误信息在后台进行打印,然后根据自定义的错误码和错误信息实例化一个ErrorInfo对象并返回给前端。

如果数据验证通过,则直接返回null或者其他需要的结果即可。

2.3 示例说明

下面通过两个示例来详细说明如何使用BindingResult自定义错误信息。

2.3.1 示例一

在这个示例中,我们定义了一个User实体类用于接收前端传递过来的User信息。在User实体类中,我们使用了@NotNull注解来要求name字段值不为空,如果为空,则认为这是一个错误的请求。

public class User {
    @NotNull(message = "姓名不能为空")
    private String name;

    private Integer age;
    private String gender;

    // getter和setter方法
}

在我们编写控制器代码时,我们需要使用BindingResult对象来获取前端返回的错误信息。如果存在错误信息,则实例化ErrorInfo并设置相关信息,然后返回给前端即可。

@PostMapping("/add")
@ResponseBody
public ErrorInfo addUser(@RequestBody @Validated User user, BindingResult bindingResult) {
    ErrorInfo errorInfo = new ErrorInfo();

    if (bindingResult.hasErrors()) {
        List<ObjectError> errors = bindingResult.getAllErrors();
        String errorMsg = errors.stream().map(x -> x.getDefaultMessage()).collect(Collectors.joining(", "));

        errorInfo.setCode("1002");
        errorInfo.setMessage(errorMsg);
        errorInfo.setField("name");
    }

    return errorInfo;
}

在这个示例中,我们需要注意以下几点:

  1. @Validated注解用于开启数据验证功能,可以直接在实体类上使用(例如示例中的User类)。

  2. BindingResult与@Validated注解必须一起使用,否则无法获得验证结果。

  3. 如果前端请求中name字段为空,则会进入到if语句中,进行相关错误信息存储和返回处理。

2.3.2 示例二

在这个示例中,我们定义了一个Student实体类,用于接收前端传递过来的学生的信息。我们对于该实体类中各字段都添加了相应的验证注解,通过这种方式进行数据校验。

public class Student {

   private int id;

   @NotEmpty(message = "姓名不能为空")
   private String name;

   @Range(min = 10, max = 99, message = "年龄必须在{min}到{max}之间")
   private int age;

   @NotBlank(message = "性别不能为空")
   private String gender;

   // getter和setter方法
}

在控制器代码中,我们通过@Validated注解和BindingResult对象来进行参数验证和错误信息的获取。

@RequestMapping("/register")
@ResponseBody
public ErrorInfo register(@RequestBody @Validated Student student, BindingResult bindingResult) {

    ErrorInfo errorInfo = new ErrorInfo();

    if (bindingResult.hasErrors()) {
        List<ObjectError> errors = bindingResult.getAllErrors();

        String errorMsg = errors.stream().map(x -> x.getDefaultMessage()).collect(Collectors.joining(", "));

        errorInfo.setCode("1002");
        errorInfo.setMessage(errorMsg);
    }

    return errorInfo;
}

在这个示例中,我们需要注意以下几点:

  1. 在实体类中使用@NotEmpty、@Range、@NotBlank等验证注解。

  2. 在控制器方法中,使用@Validated注解和BindingResult对象来获取验证信息。

  3. 对于前端请求中传递的信息,进行相应的校验,生成相关的错误信息和错误码,并返回给前端即可。

以上就是关于使用BindingResult自定义错误信息的完整攻略,希望可以对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用BindingResult 自定义错误信息 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • java数组的三种扩容方式以及程序实现详解

    Java数组的三种扩容方式以及程序实现详解 为什么需要数组扩容 在 Java 中,数组的长度是固定的,一旦数组被创建,它的大小就不能再改变了。在一些场景下,我们需要在运行时动态地改变数组的大小,那么就需要用到数组扩容。 例如,我们开发一个数组队列,数组队列的底层实现是数组。如果元素个数超过了数组的初始长度,就需要对数组进行扩容,否则会导致队列无法继续存入元素…

    Java 2023年5月19日
    00
  • Java获取json数组对象的实例讲解

    获取JSON数组对象是Java中常见的操作,通常在与API交互、解析数据等场景中经常需要使用。下面是步骤: 步骤 引入相关依赖 首先需要引入相关的依赖,包括JSON解析库和HTTP库,通常使用的是Jackson库和HttpClient库。 <dependencies> <dependency> <groupId>com.f…

    Java 2023年5月26日
    00
  • JavaWeb分页的实现代码实例

    下面是一份JavaWeb分页的实现代码实例攻略。 1. 需求分析 在网站中,当数据量较大时,我们需要把它分页显示,从而提高用户体验。而JavaWeb框架中可以使用JSP来实现分页的功能。具体来说,我们需要针对以下几个步骤实现分页功能。 2. 分页实现步骤 2.1 准备工作 首先,我们需要创建一个数据表来存储数据,其次我们需要创建一个JavaBean来封装数据…

    Java 2023年6月15日
    00
  • 详解使用Maven开发Web应用详细步骤

    下面详细讲解“详解使用Maven开发Web应用详细步骤”的完整攻略。 简介 本文将以Java Web项目为例,讲解如何使用Maven构建Web项目,包括项目创建、依赖管理、打包以及发布等方面。 步骤 1. 创建Maven项目 使用IDE或者通过命令行创建一个基于Maven的Web项目,其中pom.xml文件是Maven工程的管理中心,需要在其中添加相关的依赖…

    Java 2023年5月19日
    00
  • JAVA开发中的一些规范讲解(阿里巴巴Java开发规范手册)

    Java开发中的规范是非常重要的,可保持代码的可维护性,提高开发效率,防止出现不必要的错误,减少维护成本等。而阿里巴巴Java开发规范手册是一个有影响力的规范手册,下面我做一个阐述: 一、命名规范 类名使用 UpperCamelCase 大驼峰命名法,方法名、属性名以及变量名使用 lowerCamelCase 小驼峰命名法。 示例代码: public cla…

    Java 2023年5月20日
    00
  • 详解SpringBoot读取配置文件的N种方法

    下面是详解SpringBoot读取配置文件的N种方法的完整攻略: 1. 前言 SpringBoot是一个灵活、高效的Java框架,可以用来轻松构建Web应用程序。在SpringBoot中,读取配置文件是非常重要的一部分。本文将介绍SpringBoot读取配置文件的N种方法,并附带代码示例。 2. 通过@Value注解读取配置文件 @Value注解是Sprin…

    Java 2023年5月19日
    00
  • java编程SpringSecurity入门原理及应用简介

    Java编程Spring Security入门原理及应用简介攻略 Spring Security是一款基于Spring框架的安全框架,它为我们的Java应用程序提供了一种全面的安全解决方案。 本篇攻略将一步步地介绍Spring Security的入门原理,以及如何在Java编程中应用Spring Security。 Spring Security的入门原理 …

    Java 2023年5月20日
    00
  • java中Hibernate的状态总结

    Java中Hibernate的状态总结 Hibernate是Java中广泛使用的ORM(对象关系映射)框架之一,其核心原则是使用Java对象来映射数据库表格。在使用Hibernate时,需要注意对象实例所处的状态,本文将对Hibernate中的状态进行总结。 Hibernate对象状态 下面是Hibernate对象可能出现的几种状态: Transient状态…

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