使用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日

相关文章

  • 使用sts工具、SpringBoot整合mybatis的详细步骤

    下面是详细步骤: 准备环境 JDK8+ Maven3.0+ SpringBoot2.0+ STS(Spring Tool Suite)/ IntelliJ IDEA 创建SpringBoot项目 使用STS或者IntelliJ IDEA创建一个新的SpringBoot项目,选择Web依赖,根据个人喜好选择模板。 在pom.xml中添加MyBatis依赖: x…

    Java 2023年5月20日
    00
  • 红旗Linux4.1下安装配置Apahce+Tomcat+PHP+mySQL+vsFTPd

    下面是在红旗Linux 4.1系统下安装、配置Apache、Tomcat、PHP、MySQL和vsftpd的攻略步骤: 准备工作 安装并正确配置好红旗Linux 4.1系统,获取root权限 确保网络连接正常,可以访问外部网络 确认系统中已经安装了C/C++编译器,以及一些常用的开发工具和库文件 安装Apache 下载最新版本的Apache,使用wget命令…

    Java 2023年5月19日
    00
  • SpringBoot内置数据源的持久化与解决方案

    SpringBoot内置数据源的持久化与解决方案 SpringBoot提供了基于内置数据源的快速开发方式,但在某些情况下我们需要对数据源进行持久化,即在服务重启后仍然可以使用之前的数据源,这就需要对数据源进行持久化操作。本文将详细介绍SpringBoot内置数据源的持久化与解决方案。 SpringBoot内置数据源 SpringBoot内置了三种依赖库支持数…

    Java 2023年5月20日
    00
  • Spring Security 实现多种登录方式(常规方式外的邮件、手机验证码登录)

    Spring Security 实现多种登录方式攻略 Spring Security 作为一个强大的安全框架,支持多种登录方式,包括传统的用户名密码登录、第三方登录、手机短信验证码登录、邮件验证码登录等。本攻略将详细介绍如何使用 Spring Security 实现多种登录方式。 传统的用户名密码登录 传统的用户名密码登录是我们最常见的登录方式,主要涉及以下…

    Java 2023年6月3日
    00
  • Java设计模式之java命令模式详解

    Java设计模式之Java命令模式详解,主要介绍了命令模式的定义、结构、应用场景、优缺点以及如何在Java中实现命令模式。 命令模式的定义:将一个请求封装成一个对象,从而使用户可以用不同的请求对客户端进行参数化,即可以用请求对请求分类,同时支持请求排队、记录请求日志、撤销操作等功能。 命令模式的结构:命令(Command)、具体命令(ConcreteComm…

    Java 2023年5月24日
    00
  • Spring Cloud Feign统一设置验证token实现方法解析

    下面我将详细讲解“Spring Cloud Feign统一设置验证token实现方法解析”的完整攻略。 1. 背景 在微服务架构中,服务之间的通信非常频繁,而服务的鉴权机制也非常重要。通常情况下,服务之间会使用 token 鉴权,而 token 的生成和验证会依赖于后端的认证服务。针对这种场景,我们可以使用 Spring Cloud Feign 统一设置验证…

    Java 2023年6月15日
    00
  • 如何通过Java实现修改视频分辨率

    下面我将详细介绍如何通过Java实现修改视频分辨率的完整攻略。 1. Java获取视频原始分辨率 要实现修改视频分辨率,首先需要获取原始视频的分辨率。可以使用Java提供的FFmpeg库来获取视频的分辨率。 import java.io.BufferedReader; import java.io.IOException; import java.io.In…

    Java 2023年5月26日
    00
  • 关于Java如何正确地实现方法重载详解

    关于Java如何正确地实现方法重载详解 什么是方法重载? 方法重载(Method Overloading)指的是在一个类中定义多个同名方法,但它们的形式参数列表不同。 方法重载的目的是为了让同名方法能够接收不同类型或者不同数量的参数而有不同的行为,实现更加灵活和通用的功能。 什么条件下才能进行方法重载? 方法名称相同; 参数个数或者类型不同; 方法返回值可以…

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