使用BindingResult 自定义错误信息

yizhihongxing

下面是关于使用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数组是一种容器,用来存储多个相同类型的数据值。数组是一个固定长度的容器,它包含的元素数量是在创建数组时确定的,而且这个长度在数组的整个生命周期中保持不变。 Java数组的遍历 遍历数组就是依次访问数组内的所有元素。在Java中,常用的遍历数组的方法有以下几种: 1. for循…

    Java 2023年5月26日
    00
  • SpringBoot2.0 整合 SpringSecurity 框架实现用户权限安全管理方法

    下面我将详细讲解“SpringBoot2.0 整合 SpringSecurity 框架实现用户权限安全管理方法”的完整攻略。在过程中,我将提供两条示例。 1. 简介 Spring Security 是一个基于 Spring 框架提供的安全解决方案之一。它提供了一种简单易用的方式来实现身份认证(Authentication)和授权(Authorization)…

    Java 2023年5月20日
    00
  • 详解DES加密算法的原理与Java实现

    我会详细讲解“详解DES加密算法的原理与Java实现”的完整攻略,并包含两条示例说明。 一、DES加密算法的原理 DES是一种分组加密算法,加密时将明文分成64位一组的大小,每组的最后一位用于存储校验位。DES总共使用16个循环轮次(每轮使用一个48位的密钥子)。第一轮会将明文分成左右两部分,右部分通过跟密钥进行一个函数F运算,F函数使得输入的较小变成较大,…

    Java 2023年5月19日
    00
  • Java实现万年历效果

    下面是“Java实现万年历效果”的完整攻略。 准备工作 在实现万年历之前,需要先了解一些基本知识: Java 的日期类 Date、Calendar 和 LocalDate Java 的输入输出流,包括 Scanner 和 System.out Java 的字符串拼接和格式化输出 模块化编程及测试方法 实现步骤 接下来就可以开始实现万年历了。 步骤1:获取用户…

    Java 2023年5月19日
    00
  • java如何使用自己的maven本地仓库详解

    下面是详细的讲解: 一、什么是Maven本地仓库? Maven本地仓库就是Maven自己的仓库,是用于存储Maven项目所需要的jar包、插件和其他依赖的本地仓库。一般情况下,我们使用Maven构建Java项目时会从Maven中央仓库或者私有仓库下载依赖,但是有时候我们需要自己编写的依赖或者其他第三方依赖没有在中央仓库或私有仓库中,那么我们就需要使用自己的本…

    Java 2023年5月20日
    00
  • Java实现布隆过滤器的方法步骤

    Java实现布隆过滤器的步骤如下: 1. 导入第三方库Guava Guava是Google提供的一款Java工具库,其中包含了常用的集合、缓存、并发、字符串、I/O等工具类,也包含了布隆过滤器的实现。因此在构建Java布隆过滤器之前,需要先将Guava库导入到自己的项目中。可以通过Maven或Gradle等工具来导入,下面是Gradle的示例配置。 depe…

    Java 2023年5月26日
    00
  • JSP基于dom解析xml实例详解

    JSP基于dom解析xml实例详解 什么是DOM解析XML DOM (Document Object Model) 是一种处理 XML 文档的标准 API,它用于读取 XML 文件并解析其中的元素、节点、属性等信息。在 DOM 中,XML 文件会被视为一个树形结构,每个元素都会被视为一个节点,节点与节点之间按照父子关系进行连接,节点与属性之间按照关联关系进行…

    Java 2023年5月20日
    00
  • SpringBoot利用AOP实现一个日志管理详解

    来讲一下SpringBoot利用AOP实现一个日志管理的详细攻略。 一、前置知识 在讲解具体实现之前,需要对一些前置知识进行解释: 1.1 AOP AOP(Aspect Oriented Programming,面向切面编程)是一种编程思想,可以将与业务无关的部分(例如日志记录、权限验证等)剥离出来,通过以独立的方式进行定义和维护,将其在需要时运用进程序设计…

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