你开发的系统国际化了吗?

news2025/2/22 0:45:59

亲爱的朋友们,周一好,新的一周,精神满满。

在开发Spring Boot应用时,接口的参数校验是一个重要的环节,它确保了数据的完整性和准确性。而国际化处理则使得应用能够支持多种语言,提升了用户体验。

一、参数校验

Spring Boot中可以使用Hibernate Validator进行参数校验。Hibernate Validator提供了丰富的注解,用于对请求参数进行约束。这些注解可以直接加在Controller层的请求参数上。

首先,在pom.xml中引入Hibernate Validator依赖:

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

然后,在Controller层的请求参数上使用注解进行校验:

import org.springframework.validation.annotation.Validated;  
import org.springframework.web.bind.annotation.PostMapping;  
import org.springframework.web.bind.annotation.RequestBody;  
import org.springframework.web.bind.annotation.RestController;  
  
import javax.validation.constraints.NotNull;  
  
@RestController  
public class MyController {  
  
    @PostMapping("/user")  
    public ResponseEntity<User> createUser(@Validated @RequestBody User user) {  
        // 处理业务逻辑  
        return ResponseEntity.ok(user);  
    }  
  
    public static class User {  
        @NotNull(message = "用户名不能为空")  
        private String username;  
          
        // 其他字段和getter/setter方法...  
    }  
}

在上面的代码中,我们使用了@NotNull注解来约束username字段不能为空,并指定了校验失败时的错误消息。

二、国际化处理

国际化处理主要是将错误消息、提示信息等根据用户的语言偏好进行展示。Spring Boot提供了强大的国际化支持,通过MessageSource接口可以实现。

首先,在src/main/resources目录下创建多个语言环境的消息文件,例如messages_en.propertiesmessages_zh_CN.properties。这些文件中包含了各种错误消息和提示信息的键值对。

messages_en.properties示例:

user.username.notnull=Username cannot be null.

messages_zh_CN.properties示例:

user.username.notnull=用户名不能为空。

然后,在Spring Boot配置类中配置MessageSource

import org.springframework.context.annotation.Bean;  
import org.springframework.context.annotation.Configuration;  
import org.springframework.context.support.ReloadableResourceBundleMessageSource;  
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;  
  
@Configuration  
public class ValidationConfig {  
  
    @Bean  
    public MessageSource messageSource() {  
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();  
        messageSource.setBasenames("classpath:messages"); // 指定消息文件的基础名称  
        messageSource.setDefaultEncoding("UTF-8"); // 设置默认编码  
        messageSource.setCacheSeconds(60); // 设置缓存时间,单位为秒  
        return messageSource;  
    }  
  
    @Bean  
    public MethodValidationPostProcessor methodValidationPostProcessor() {  
        return new MethodValidationPostProcessor();  
    }  
}

在上面的代码中,我们创建了一个ReloadableResourceBundleMessageSource实例,并指定了消息文件的基础名称为messages,这样Spring Boot就会根据用户的语言偏好自动加载对应的消息文件。

最后,在参数校验注解中引用国际化消息:

import javax.validation.constraints.NotNull;  
  
public static class User {  
    @NotNull(message = "{user.username.notnull}")  
    private String username;  
      
    // 其他字段和getter/setter方法...  
}

在上面的代码中,我们将@NotNull注解的message属性设置为{user.username.notnull},这样当校验失败时,Spring Boot就会从消息文件中查找对应的错误消息。

三、总结

通过结合Hibernate ValidatorSpring Boot的国际化支持,我们可以轻松实现接口参数校验与国际化处理。这种方式不仅提高了数据的完整性和准确性,还提升了用户体验。在实际开发中,我们还可以根据具体需求对参数校验进行更细粒度的控制,比如使用自定义校验注解、分组校验等。同时,也可以结合Spring Boot的其他功能,如全局异常处理、数据绑定等,来构建更加健壮和灵活的应用。

欢迎关注我的公众号“程序员洋哥”,原创技术文章第一时间推送。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1526655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue中判断是否使用自定义插槽

在封装自定义组件时&#xff0c;需要判断使用者是否使用了插槽<slot"aaa">&#xff0c;如果没有则使用一个组件中默认的值&#xff0c;反之就用传入的内容<template name"aaa"></template>,实现如下&#xff1a; <div class"lin…

《1w实盘and大盘基金预测 day6》

昨日预测完美&#xff0c;点位基本符合&#xff0c;我预测3052&#xff0c;实际最低3055。 走势也符合高平开&#xff0c;冲高回落&#xff0c;再反震荡上涨 大家可以观察我准不准哟&#xff5e;后面有我的一些写笔记、分享的网站。 关注公众号&#xff0c;了解各种理财预测内…

【字符串匹配】BF与KMP算法

一、字符串匹配问题 字符串匹配问题是指在一个主文本字符串中查找一个指定的模式字符串&#xff0c;并确定模式字符串在主文本中出现的位置。这个问题在计算机科学中非常常见&#xff0c;尤其是在文本处理、数据搜索和生物信息学等领域。 字符串匹配问题通常涉及到以下几个方…

JS原型和原型链的理解

原型链图&#xff0c;图中Parent是构造函数&#xff0c;p1是通过Parent实例化出来的一个对象 前置知识 js中对象和函数的关系&#xff0c;函数其实是对象的一种 函数、构造函数的区别&#xff0c;任何函数都可以作为构造函数&#xff0c;但是并不能将任意函数叫做构造函数&…

mybatis-plus 的saveBatch性能分析

Mybatis-Plus 的批量保存saveBatch 性能分析 目录 Mybatis-Plus 的批量保存saveBatch 性能分析背景批量保存的使用方案循环插入使用PreparedStatement 预编译优点&#xff1a;缺点&#xff1a; Mybatis-Plus 的saveBatchMybatis-Plus实现真正的批量插入自定义sql注入器定义通用…

从历年315曝光案例,看APP隐私合规安全

更多网络安全干货内容&#xff1a;点此获取 ——————— 随着移动互联网新兴技术的发展与普及&#xff0c;移动APP的应用渗透到人们的衣食住行方方面面&#xff0c;衍生出各类消费场景的同时&#xff0c;也带来了无数的个人隐私数据泄露、网络诈骗事件。 历年来&#xff…

29.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据推测功能的算法实现

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;28.数据推测结果…

修改/etc/resolve.conf重启NetworkManager之后自动还原

我ping 百度报错&#xff1a; [rootk8snode1 ~]# ping baidu.com ping: baidu.com: Name or service not known很明显&#xff0c;这是DNS解析问题。 于是我修改 /etc/resolv.conf 文件后&#xff0c;执行完sudo systemctl restart NetworkManager&#xff0c;/etc/resolv.con…

Linux-多线程2 ——线程等待、线程异常、线程退出、线程取消和线程分离

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、线程间的全局变量共享__thread 修饰全局变量 二、线程等待pthread_self和tid 三、线程异常四、线程退出五、线程取消六、线程分离 一、线程间的全局变量共享 上…

ttkbootstrap界面美化系列之主窗口(二)

一&#xff1a;创建主窗口 在利用ttkbootstrap构建应用程序时&#xff0c;可以用tkinter传统的tk方法来创建主界面&#xff0c;也可以用ttkbootstrap中的window类来创建&#xff0c;下面我们来看看两者的区别 1&#xff0c;传统方法创建主界面 import tkinter as tk import …

力扣思路题:最长特殊序列1

int findLUSlength(char * a, char * b){int alenstrlen(a),blenstrlen(b);if (strcmp(a,b)0)return -1;return alen>blen?alen:blen; }

[CVPR-24] Text-to-3D using Gaussian Splatting

3DGS对初始化敏感&#xff1b;引入基于Point-E的3D SDS可以缓解多脸问题&#xff1b;外观细化阶段可以有效抑制异常点&#xff0c;并提高可视化效果&#xff1b;不需要对SDS的改进&#xff0c;用gudiance scale100可以取得很不错的结果。 [pdf | proj | code] 方法 Geometry O…

Linux——动静态库的制作及使用与动态库原理

目录 一、静态库 1.静态库的制作 2.静态库的使用 加载静态库方法一&#xff1a;安装头文件与库文件 加载静态库方法二&#xff1a;指定文件目录 二、动态库 1.动态库的制作 2.动态库的使用 方法一&#xff1a;安装到系统中 方法二&#xff1a;软链接 方法三&…

c语言文件操作(中)

目录 1. 文件的顺序读写1.1 顺序读写函数1.2 顺序读写函数的原型和介绍 结语 1. 文件的顺序读写 1.1 顺序读写函数 函数名功能适用于fgetc字符输入函数所有输出流fputc字符输出函数所有输出流fgets文本行输入函数所有输出流fputs文本行输出函数所有输出流fscanf格式化输入函数…

刷题DAY24 | LeetCode 77-组合

1 回溯法理论基础 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。回溯是递归的副产品&#xff0c;只要有递归就会有回溯。 所以以下讲解中&#xff0c;回溯函数也就是递归函数&#xff0c;指的都是一个函数。 1.1 回溯法的效率 回溯法的性能如何呢&#xff0…

完整指南:如何使用 Stable Diffusion API

Stable Diffusion 是一个先进的深度学习模型&#xff0c;用于创造和修改图像。这个模型能够基于文本描述来生成图像&#xff0c;让机器理解和实现用户的创意。使用这项技术的关键在于掌握其 API&#xff0c;通过编程来操控图像生成的过程。 在探索 Stable Diffusion API 的世界…

HarmonyOS NEXT应用开发之Web获取相机拍照图片案例

介绍 本示例介绍如何在HTML页面中拉起原生相机进行拍照&#xff0c;并获取返回的图片。 效果预览图 使用说明 点击HTML页面中的选择文件按钮&#xff0c;拉起原生相机进行拍照。完成拍照后&#xff0c;将图片在HTML的img标签中显示。 实现思路 添加Web组件&#xff0c;设置…

Vue.js+SpringBoot开发食品生产管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 加工厂管理模块2.2 客户管理模块2.3 食品管理模块2.4 生产销售订单管理模块2.5 系统管理模块2.6 其他管理模块 三、系统展示四、核心代码4.1 查询食品4.2 查询加工厂4.3 新增生产订单4.4 新增销售订单4.5 查询客户 五、…

生成式人工智能服务安全基本要求实务解析

本文尝试明晰《基本要求》的出台背景与实践定位&#xff0c;梳理《基本要求》所涉的各类安全要求&#xff0c;以便为相关企业遵循执行《基本要求》提供抓手。 引言 自2022年初以来&#xff0c;我国陆续发布算法推荐、深度合成与生成式人工智能服务相关的规范文件&#xff0c;…

阿里云服务器ECS经济型e实例性能如何?

阿里云服务器ECS推出经济型e系列&#xff0c;经济型e实例是阿里云面向个人开发者、学生、小微企业&#xff0c;在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器&#xff0c;CPU采用Intel Xeon Platinum架构处理器&#xff0c;支持1:1、1:2、1:4多种处理…