SpringBoot Validation提示信息国际化配置方式

以下是“SpringBoot Validation提示信息国际化配置方式”的完整攻略。

1. 添加依赖

在 pom.xml 文件中添加如下依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
  <groupId>org.hibernate.validator</groupId>
  <artifactId>hibernate-validator</artifactId>
</dependency>

2. 创建 Resource Bundle 文件

在 src/main/resources 目录下创建一个 messages 目录,在 messages 目录中创建 validation.properties 文件,用于存储提示信息的 key-value 键值对。

以 @NotNull 注解为例,可以添加以下内容:

javax.validation.constraints.NotNull.message=该字段不能为空

其中,javax.validation.constraints.NotNull.message 是默认提示信息,该值不能改变。

3. 配置 LocalValidatorFactoryBean Bean

在配置类上添加 @Bean 注解,同时返回一个 LocalValidatorFactoryBean 实例,并以 SpringBoot 的方式设置 validationMessageSource。

@Configuration
public class ValidatorConfiguration {

  @Bean
  public Validator validator(MessageSource messageSource) {
    LocalValidatorFactoryBean validatorFactoryBean = new LocalValidatorFactoryBean();
    validatorFactoryBean.setValidationMessageSource(messageSource);
    return validatorFactoryBean;
  }

  @Bean
  public MessageSource messageSource() {
    ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("classpath:messages/validation");
    messageSource.setDefaultEncoding("UTF-8");
    return messageSource;
  }

}

其中,messageSource() 方法用于设置 validationMessageSource,validator() 方法用于将 Validator 注册成 Bean。

4. 使用国际化配置

在使用 @Valid 或 @Validated 注解时,会默认调用 validator() 方法来获取 Validator 对象,并使用 LocalValidatorFactoryBean 对象进行参数校验。

例如,下面代码中使用了 @Validated 注解,并带有 @NotNull 注解:

@RestController
@Validated
public class UserController {

  @PostMapping("/user")
  public String addUser(@Valid User user) {
    // ...
  }

}

当 User 对象中的某个字段为空时,会返回上一步中设置的国际化提示信息:

{
    "message": "Validation failed",
    "errors": [
        "该字段不能为空"
    ]
}

示例1

public class User {

  @NotNull(message = "{javax.validation.constraints.NotNull.message}")
  private String username;

  // ...

}

示例2

public class User {

  @NotBlank(message = "{javax.validation.constraints.NotBlank.message}")
  @Size(min = 5, max = 16, message = "{javax.validation.constraints.Size.message}")
  private String username;

  @NotBlank(message = "{javax.validation.constraints.NotBlank.message}")
  @Size(min = 8, max = 20, message = "{javax.validation.constraints.Size.message}")
  private String password;

  // ...

}

以上就是“SpringBoot Validation提示信息国际化配置方式”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot Validation提示信息国际化配置方式 - Python技术站

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

相关文章

  • 修改及反编译可运行Jar包实现过程详解

    下面是关于“修改及反编译可运行Jar包实现过程详解”的完整攻略,包括两条示例说明: 修改及反编译可运行Jar包实现过程详解 1. 背景说明 在进行Java开发过程中,我们会将程序打包成Jar包进行发布。但是有些时候,我们希望对现有的Jar包进行修改,添加一些我们需要的功能或者修改一些原有的不合适的代码等。这时,我们就需要对Jar包进行反编译,修改对应的源代码…

    Java 2023年5月26日
    00
  • 使用maven工具解决jar包冲突或重复加载的问题

    使用 Maven 工具可以有效地解决 Java 项目中 Jar 包冲突或者重复加载的问题。接下来,我会详细讲解如何使用 Maven 工具来解决这个问题的完整攻略。 1. Maven依赖冲突的解决 Maven 场景中,当我们引用的多个 Jar 包中存在重复的类或者接口时,会出现冲突。这种冲突情况下,只有部分功能可以使用,或者无法正常使用。 为了解决这个问题,我…

    Java 2023年5月19日
    00
  • Java利用数组随机抽取幸运观众如何实现

    为了实现Java利用数组随机抽取幸运观众功能,可以按照以下步骤进行: 第一步:创建数组 声明一个整型数组,数组长度为所有参与抽奖的观众人数。示例代码如下: int[] audiences = new int[100]; 第二步:填充数组 为了能够随机抽取其中的一个幸运观众,需要在数组中填充每个观众的序号。例如,如果有100位参与者,我们就需要将1-100的序…

    Java 2023年5月26日
    00
  • 详解Java中多进程编程的实现

    详解Java中多进程编程的实现 在Java中,通过多进程编程可以让程序实现并行处理,提高程序的执行效率。下面我们将详细讲解Java中多进程编程的实现。 实现多进程的方式 Java中有两种实现多进程的方式: 1. 继承Thread类并重写run方法 通过继承Thread类并重写run方法,我们可以自定义一个线程类,在其中实现多进程的代码逻辑。 实现代码如下: …

    Java 2023年5月18日
    00
  • Spring Data Jpa的四种查询方式详解

    下面是关于“Spring Data Jpa的四种查询方式详解”的完整攻略: Spring Data Jpa的四种查询方式详解 Spring Data Jpa是一个简化了JPA规范的框架,它提供了许多便利的功能,其中最重要的就是提供了四种查询方式。 命名查询 命名查询是指根据方法名进行查询。Spring Data Jpa会根据方法名的规则自动生成查询语句,无需…

    Java 2023年5月20日
    00
  • jquery在启动页面时,自动加载数据的实例

    让我为您详细讲解一下“jquery在启动页面时,自动加载数据的实例”的完整攻略。 1. 引入jquery库文件 在网站的HTML文件中需要引入jquery库文件,可以选择在线引入或本地引入。 在线引入: <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min…

    Java 2023年6月15日
    00
  • Java 数据结构之时间复杂度与空间复杂度详解

    Java 数据结构之时间复杂度与空间复杂度详解 什么是时间复杂度和空间复杂度 在了解时间复杂度和空间复杂度之前,我们需要先了解一下什么是复杂度。 在计算机科学中,复杂度是指算法的性能指标,主要包括时间复杂度和空间复杂度。 时间复杂度是指算法在执行过程中所需要的时间资源,通常用执行次数来表示,也被称为算法的渐进时间复杂度。 空间复杂度是指算法在执行过程中所需要…

    Java 2023年5月26日
    00
  • maven打包时候修改包名称带上git版本号和打包时间方式

    按照要求,我会为你提供一个完整的Maven项目中如何在打包时修改包名称带上git版本号和打包时间的攻略。 概述: Maven利用pom.xml文件管理项目信息和依赖,pom.xml文件中通过使用插件来执行相关的动作操作。在这里,我们需要用到maven-jar-plugin插件来进行Maven项目的打包操作。通过重写 ${project.build.final…

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